BBS項目day04 文章詳情頁、點贊點菜、評論功能

一、路由

from django.contrib import admin
from django.urls import path, re_path
from app01 import views
from django.views.static import serve
from django.conf import settingsurlpatterns = [path('admin/', admin.site.urls),# 注冊path('register/', views.register),# 登錄path('login/', views.login),# 驗證碼path('get_code/', views.get_code),# 首頁路由path('home/', views.home),# 退出系統path('logout/', views.logout),# 修改密碼path('set_password/', views.set_password),# 放開media文件夾re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}),# 文章詳情頁re_path('(?P<username>\w+)/(?P<article_id>\d+)', views.article_detail),# 點贊點彩path('up_and_down/', views.up_and_down),# 評論功能path('comment/', views.comment),# re_path('(?P<username>\w+)/category/(\d+)', views.site),# re_path('(?P<username>\w+)/tag/(\d+)', views.site),# re_path('(?P<username>\w+)/archive/(\w+)', views.site),# 優化以上三個路由re_path('(?P<username>\w+)/(?P<condition>category|tag|archive)/(?P<param>.*)', views.site),re_path('(?P<username>\w+)', views.site),
]

二、文章詳情頁

1.前端

{% extends 'home.html' %}{% block css %}<style>.s1 {margin-right: 10px;color: #999;}.content {font-size: 18px;color: #444;}#div_digg {float: right;margin-bottom: 10px;margin-right: 30px;font-size: 12px;width: 128px;text-align: center;margin-top: 10px;}.diggit {float: left;width: 46px;height: 52px;background: url(/static/img/upup.gif) no-repeat;text-align: center;cursor: pointer;margin-top: 2px;padding-top: 5px;}.buryit {float: right;margin-left: 20px;width: 46px;height: 52px;background: url(/static/img/downdown.gif) no-repeat;text-align: center;cursor: pointer;margin-top: 2px;padding-top: 5px;}.clear {clear: both;}.diggword {margin-top: 5px;margin-left: 0;font-size: 12px;color: #808080;}.clearfix:focus {content: '';display: block;clear: both;}</style>
{% endblock %}{% block content %}<div class="col-md-3"><div class="panel panel-info"><div class="panel-heading">文章分類</div><div class="panel-body">{% for category in category_list %}<!-- 如果后臺用的是values --><p><a href="/{{ username }}/category/{{ category.2 }}">{{ category.0 }} ({{ category.1 }})</a></p><!-- 如果后臺用的是values -->{#                    <p><a href="/{{ username }}/category/{{ category.pk }}">{{ category.name }} ({{ category.count_article_num }})</a></p>#}{% endfor %}</div></div><div class="panel panel-success"><div class="panel-heading">文章標簽</div><div class="panel-body">{% for tag in tag_list %}<p><a href="/{{ username }}/tag/{{ tag.2 }}">{{ tag.0 }} ({{ tag.1 }})</a></p>{% endfor %}</div></div><div class="panel panel-danger"><div class="panel-heading">日期歸檔</div><div class="panel-body">{% for date in date_list %}{#  <p><a href="">{{ date.0 }} ({{ date.1 }})</a></p> #}<p><a href="/{{ username }}/archive/{{ date.month|date:'Y-m' }}">{{ date.month|date:'Y年m月' }}({{ date.count_article_nums }})</a></p>{% endfor %}</div></div></div><div class="col-md-9"><h3 style="color: #399ab2;">{{ article_detail.title }}</h3><div class="content">{{ article_detail.content|safe }}</div></div>{% endblock %}{% block js %}<script>// 11647089,'Digg'分別表示文章id和標志flag// 思路1:{% comment %}function votePost(id, flag) {is_up = flag === 'Digg' ? 0 : 1;}{% endcomment %}// 思路2:$(".active").click(function () {let is_up = $(this).hasClass('diggit');// 文章idvar article_id = '{{ article_detail.pk }}';var _this = $(this);// 發起Ajax請求$.ajax({url: '/up_and_down/',type: 'post',data: {is_up: is_up, article_id: article_id, csrfmiddlewaretoken: '{{ csrf_token }}'},success: function () {// 將標簽放入文本,要么是text,要么是htmlif (res === 200) {$("#digg_tips").text(res.msg);// 如果是點贊就讓點贊數加1,如果是點踩就讓點踩數加1// 注意:在text()中加數據就是賦值,空就是獲取值let old_num = _this.children().text();// 此時的 old_num 是string類型,需要轉類型{#_this.children().text(parseInt(old_num)+1);#}//或者使用 Number_this.children().text(Number(old_num) + 1);} else {$("#digg_tips").html(res.msg);}},});});</script>
{% endblock %}

2.后端

# 文章詳情頁
def article_detail(request, username, article_id):print(article_id)  # 1user_obj = models.UserInfo.objects.filter(username=username).first()print(user_obj)if not user_obj:'''圖片防盜鏈:通過 Referer參數判斷,通過這個參數就可以知道你當前的地址是從哪個網頁調過來的,然后做驗證   '''return render(request, '404.html')# 查詢用戶自己的所有文章(過濾當前站點的文章)blog = user_obj.blogarticle_detail = models.Article.objects.filter(pk=article_id).first()category_list = models.Category.objects.filter(blog=blog).annotate(count_article_num=Count('article__pk')).values_list('name', 'count_article_num', 'pk')tag_list = models.Tag.objects.filter(blog=blog).annotate(count_article_num=Count('article__pk')).values_list('name', 'count_article_num', 'pk')date_list = models.Article.objects.annotate(month=TruncMonth('create_time')).values('month').filter(blog=blog).annotate(count_article_nums=Count('pk')).values('month', 'count_article_nums')# 查詢所有的評論列表comment_list = models.Comment.objects.filter(article_id=article_id).all()return render(request, 'article_detail.html', locals())

三、點贊點菜

1.前端

{% extends 'home.html' %}{% block css %}<style>.s1 {margin-right: 10px;color: #999;}.content {font-size: 18px;color: #444;}#div_digg {float: right;margin-bottom: 10px;margin-right: 30px;font-size: 12px;width: 128px;text-align: center;margin-top: 10px;}.diggit {float: left;width: 46px;height: 52px;background: url(/static/img/upup.gif) no-repeat;text-align: center;cursor: pointer;margin-top: 2px;padding-top: 5px;}.buryit {float: right;margin-left: 20px;width: 46px;height: 52px;background: url(/static/img/downdown.gif) no-repeat;text-align: center;cursor: pointer;margin-top: 2px;padding-top: 5px;}.clear {clear: both;}.diggword {margin-top: 5px;margin-left: 0;font-size: 12px;color: #808080;}.clearfix:focus {content: '';display: block;clear: both;}</style>
{% endblock %}{% block content %}<div class="col-md-3"><div class="panel panel-info"><div class="panel-heading">文章分類</div><div class="panel-body">{% for category in category_list %}<!-- 如果后臺用的是values --><p><a href="/{{ username }}/category/{{ category.2 }}">{{ category.0 }} ({{ category.1 }})</a></p><!-- 如果后臺用的是values -->{#                    <p><a href="/{{ username }}/category/{{ category.pk }}">{{ category.name }} ({{ category.count_article_num }})</a></p>#}{% endfor %}</div></div><div class="panel panel-success"><div class="panel-heading">文章標簽</div><div class="panel-body">{% for tag in tag_list %}<p><a href="/{{ username }}/tag/{{ tag.2 }}">{{ tag.0 }} ({{ tag.1 }})</a></p>{% endfor %}</div></div><div class="panel panel-danger"><div class="panel-heading">日期歸檔</div><div class="panel-body">{% for date in date_list %}{#  <p><a href="">{{ date.0 }} ({{ date.1 }})</a></p> #}<p><a href="/{{ username }}/archive/{{ date.month|date:'Y-m' }}">{{ date.month|date:'Y年m月' }}({{ date.count_article_nums }})</a></p>{% endfor %}</div></div></div><div class="col-md-9"><h3 style="color: #399ab2;">{{ article_detail.title }}</h3><div class="content">{{ article_detail.content|safe }}</div><!-- 點贊點彩樣式開始 --><div class="clearfix"><div id="div_digg"><div class="diggit active" onclick="votePost(11647089,'Digg')"><span class="diggnum" id="digg_count">{{ article_detail.up_num }}</span></div><div class="buryit active" onclick="votePost(11647089,'Bury')"><span class="burynum" id="bury_count">{{ article_detail.down_num }}</span></div><div class="clear"></div><div class="diggword" id="digg_tips" style="color: red;"></div></div></div><!-- 點贊點彩樣式結束 --></div>{% endblock %}{% block js %}<script>// 11647089,'Digg'分別表示文章id和標志flag// 思路1:{% comment %}function votePost(id, flag) {is_up = flag === 'Digg' ? 0 : 1;}{% endcomment %}// 思路2:$(".active").click(function () {let is_up = $(this).hasClass('diggit');// 文章idvar article_id = '{{ article_detail.pk }}';var _this = $(this);// 發起Ajax請求$.ajax({url: '/up_and_down/',type: 'post',data: {is_up: is_up, article_id: article_id, csrfmiddlewaretoken: '{{ csrf_token }}'},success: function () {// 將標簽放入文本,要么是text,要么是htmlif (res === 200) {$("#digg_tips").text(res.msg);// 如果是點贊就讓點贊數加1,如果是點踩就讓點踩數加1// 注意:在text()中加數據就是賦值,空就是獲取值let old_num = _this.children().text();// 此時的 old_num 是string類型,需要轉類型{#_this.children().text(parseInt(old_num)+1);#}//或者使用 Number_this.children().text(Number(old_num) + 1);} else {$("#digg_tips").html(res.msg);}},});});</script>
{% endblock %}

2.后端

# 點贊點彩
def up_and_down(request):'''分析點贊點彩的實現邏輯:1.必須判斷用戶是否登陸了。如果沒有則在前端頁面顯示登錄2.若是第一次登錄:2.1 點贊數加 12.2 在頁面上顯示點贊成功3.如果已經點擊過,就提示不讓他再點了4.如果是第一次點擊,應該在處理哪些邏輯4.1 肯定需要在點贊點彩表中增加一條記錄4.2 還需要更新文章中的up_num或者down_num字段5. 取消點贊或者點彩功能-----》收藏:param request::return:'''if request.method == 'POST':back_dict = {'code': 200, 'msg': '支持成功'}# 1.接收參數is_up = request.POST.get('is_UP')  # stris_up = json.loads(is_up)article_id = request.POST.get('article_id')# 2.判斷用戶是否登錄if not request.session.get('username'):back_dict['code'] = 1400back_dict['msg'] = '請先<a href="/login/" style="color: red;">登錄</a>'return JsonResponse(back_dict)# 3.驗證參數# 4.判斷是否已經點贊過了res = models.UpAndDown.objects.filter(article_id=article_id, user_id=request.session.get('id')).first()if res:back_dict['code'] = 1401back_dict['msg'] = '你已經支持過了'return JsonResponse(back_dict)# 5.處理業務邏輯# 操作up_and_down, articleif is_up:models.Article.objects.create(pk=article_id).update(up_num=F('up_num') + 1)else:models.Article.objects.filter(pk=article_id).update(down_num=F('down_num') + 1)back_dict['msg'] = '支持成功'# 查詢出來要么點贊,要么點踩models.UpAndDown.objects.create(is_up=is_up, article_id=article_id, user_id=request.session.get('id'))return JsonResponse(back_dict)

四、評論功能

1.前端

{% extends 'home.html' %}{% block css %}<style>.s1 {margin-right: 10px;color: #999;}.content {font-size: 18px;color: #444;}#div_digg {float: right;margin-bottom: 10px;margin-right: 30px;font-size: 12px;width: 128px;text-align: center;margin-top: 10px;}.diggit {float: left;width: 46px;height: 52px;background: url(/static/img/upup.gif) no-repeat;text-align: center;cursor: pointer;margin-top: 2px;padding-top: 5px;}.buryit {float: right;margin-left: 20px;width: 46px;height: 52px;background: url(/static/img/downdown.gif) no-repeat;text-align: center;cursor: pointer;margin-top: 2px;padding-top: 5px;}.clear {clear: both;}.diggword {margin-top: 5px;margin-left: 0;font-size: 12px;color: #808080;}.clearfix:focus {content: '';display: block;clear: both;}</style>
{% endblock %}{% block content %}<div class="col-md-3"><div class="panel panel-info"><div class="panel-heading">文章分類</div><div class="panel-body">{% for category in category_list %}<!-- 如果后臺用的是values --><p><a href="/{{ username }}/category/{{ category.2 }}">{{ category.0 }} ({{ category.1 }})</a></p><!-- 如果后臺用的是values -->{#                    <p><a href="/{{ username }}/category/{{ category.pk }}">{{ category.name }} ({{ category.count_article_num }})</a></p>#}{% endfor %}</div></div><div class="panel panel-success"><div class="panel-heading">文章標簽</div><div class="panel-body">{% for tag in tag_list %}<p><a href="/{{ username }}/tag/{{ tag.2 }}">{{ tag.0 }} ({{ tag.1 }})</a></p>{% endfor %}</div></div><div class="panel panel-danger"><div class="panel-heading">日期歸檔</div><div class="panel-body">{% for date in date_list %}{#  <p><a href="">{{ date.0 }} ({{ date.1 }})</a></p> #}<p><a href="/{{ username }}/archive/{{ date.month|date:'Y-m' }}">{{ date.month|date:'Y年m月' }}({{ date.count_article_nums }})</a></p>{% endfor %}</div></div></div><div class="col-md-9"><h3 style="color: #399ab2;">{{ article_detail.title }}</h3><div class="content">{{ article_detail.content|safe }}</div><!-- 點贊點彩樣式開始 --><div class="clearfix"><div id="div_digg"><div class="diggit active" onclick="votePost(11647089,'Digg')"><span class="diggnum" id="digg_count">{{ article_detail.up_num }}</span></div><div class="buryit active" onclick="votePost(11647089,'Bury')"><span class="burynum" id="bury_count">{{ article_detail.down_num }}</span></div><div class="clear"></div><div class="diggword" id="digg_tips" style="color: red;"></div></div></div><!-- 點贊點彩樣式結束 --><!-- 評論列表的展示 --><div class="comment_list"><h3><span class="glyphicon glyphicon-comment"></span>評論列表</h3><ul class="list-group">{% for comment in comment_list %}<li class="list-group-item"><span style="margin-right: 10px;"># {{ forloop.counter }}樓</span><span style="margin-right: 10px;">{{ comment.comment_time }}</span><!-- 子評論 -->{#                        <span style="margin-right: 10px;">{{ comment.parent.user.username }}</span>#}<!-- 根評論 --><span style="margin-right: 10px;">{{ comment.user.username }}</span><!-- 若是頁面有滾動輪,則 a 標簽中的 href 不能用 #,否則頁面會調到開頭,應該用javascript:; 這是因為錨點的緣故 --><span style="margin-right: 10px;" class="pull-right"><a href="javascript:;" comment_username="{{ comment.user.username }}"comment_id="{{ comment.pk }}" class="repay">回復</a></span><div class="content" style="margin-left: 14px;">{% if comment.parent %}{{ comment.content }}{% else %}<!-- @用戶名 評論的內容 --><p>@ {{ comment.parent.user.username }}</p><p>{{ comment.content }}</p>{% endif %}</div></li>{% endfor %}</ul></div><!-- 評論列表的展示結束 --><!-- 評論功能開始 --><div class="comment"><p><span class="glyphicon glyphicon-comment"></span>發表評論</p><p><textarea name="" id="content" cols="30" rows="10"></textarea></p><p><button class="btn btn-success comment_content">提交評論</button></p></div><!-- 評論功能結束 --></div>{% endblock %}{% block js %}<script>// 11647089,'Digg'分別表示文章id和標志flag// 思路1:{% comment %}function votePost(id, flag) {is_up = flag === 'Digg' ? 0 : 1;}{% endcomment %}// 思路2:$(".active").click(function () {let is_up = $(this).hasClass('diggit');// 文章idvar article_id = '{{ article_detail.pk }}';var _this = $(this);// 發起Ajax請求$.ajax({url: '/up_and_down/',type: 'post',data: {is_up: is_up, article_id: article_id, csrfmiddlewaretoken: '{{ csrf_token }}'},success: function () {// 將標簽放入文本,要么是text,要么是htmlif (res === 200) {$("#digg_tips").text(res.msg);// 如果是點贊就讓點贊數加1,如果是點踩就讓點踩數加1// 注意:在text()中加數據就是賦值,空就是獲取值let old_num = _this.children().text();// 此時的 old_num 是string類型,需要轉類型{#_this.children().text(parseInt(old_num)+1);#}//或者使用 Number_this.children().text(Number(old_num) + 1);} else {$("#digg_tips").html(res.msg);}},});});// 定義一個全局變量 parent_id// 若為空則是根評論,有值就是子評論var parent_id = null;<!-- 評論功能開始 -->$(".comment_content").click(function () {// 1.獲取參數var article_id = '{{ article_detail.pk }}';// 2.獲取評論的內容var content = $('#content').val();// 3.判斷是根評論還是子評論if (parent_id) {// 有值就是子評論// indexOf 若匹配到了則返回它在字符串中的位置let sub_number = content.indexOf('\n' + '');// 拿到截取之后的內容content = content.slice(sub_number);}$.ajax({url: '/comment/',type: 'post',data: {article_id: article_id,content: content,parent_id: parent_id,csrfmiddlewaretoken: '{{ csrf_token }}'},success: function (res) {// 做評論內容的臨時渲染// 注意:反引號是 ES6語法中的模板語法var username = '{{ request.session.username }}';var html = `<li class="list-group-item"><span style="margin-right: 10px;"><span class="glyphicon glyphicon-comment"></span>${username}</span><div class="content" style="margin-left: 14px;">${content}</div></li>`$(".list-group").append(html)//清空內容$('#content').val('')},});});<!-- 評論功能結束 --><!-- 子評論功能開始 -->$(".repay").click(function () {// 獲取自定義屬性comment_usernamelet comment_username = $(this).attr('comment_username');// 獲取子評論的 parent_idparent_id = $(this).attr("comment_id");// 根據評論框 textarea的id屬性,設置回復格式焦點,并且換行$("#content").val('@' + comment_username + '\n').focus();});<!-- 子評論功能結束 --></script>
{% endblock %}

2.后端


# 評論功能
def comment(request):'''分析評論的邏輯:1.登錄之后才能評論2.評論的內容要入庫1.操作文章表,2.評論表:param request::return:'''back_dict = {'code': 200, 'msg': '支持成功'}# 1.接收參數article_id = request.POST.get('article_id')content = request.POST.get('content')parent_id = request.POST.get('parent_id')# 2.判斷用戶是否登錄if not request.session.get('username'):back_dict['code'] = 1404back_dict['msg'] = '請先登錄之后再評論'return JsonResponse(back_dict)# 加事務from django.db import transactiontry:with transaction.atomic():# 操作文章表models.Article.objects.filter(pk=article_id).update(comment_num=F('comment_num') + 1)# 操作評論表models.Comment.objects.create(content=content, article_id=article_id,parent_id=parent_id, user_id=request.session.get('id'))except:# 加入日志...transaction.rollback()return JsonResponse(back_dict)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43254.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43254.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【3Ds Max】布料命令的簡單使用

簡介 在3ds Max中&#xff0c;"布料"&#xff08;Cloth&#xff09;是一種模擬技術&#xff0c;用于模擬物體的布料、織物或軟體的行為&#xff0c;例如衣物、帆布等。通過應用布料模擬&#xff0c;您可以模擬出物體在重力、碰撞和其他外力作用下的變形和動態效果。…

蘋果審核:傳完包,郵箱收到 ITMS-90078: Missing Push Notification Entitlement

郵件原文&#xff1a; We identified one or more issues with a recent delivery for your app, "***" 1.0. Your delivery was successful, but you may wish to correct the following issues in your next delivery: ITMS-90078: Missing Push Notification En…

Java尋找數組的中心下標

目錄 1.題目描述 2.題解 分析 具體實現 1.題目描述 給你一個整數數組 nums &#xff0c;請計算數組的 中心下標 。 數組 中心下標 是數組的一個下標&#xff0c;其左側所有元素相加的和等于右側所有元素相加的和。 如果中心下標位于數組最左端&#xff0c;那么左側數之和…

【C++ 記憶站】引用

文章目錄 一、引用概念二、引用特性1、引用在定義時必須初始化2、一個變量可以有多個引用3、引用一旦引用一個實體&#xff0c;再不能引用其他實體 三、常引用四、使用場景1、做參數1、輸出型參數2、大對象傳參 2、做返回值1、傳值返回2、傳引用返回 五、傳值、傳引用效率比較六…

label引用圖片出現??

參考latex 引用圖片“\ref figure”_latex \ref加上前綴fig_Junruiqwertyuiop的博客-CSDN博客 label需要放在caption后面&#xff0c;如 \caption{Overview of BERT.} \label{BERT} 猜測&#xff0c;label可能會根據圖表或者公式的caption與圖表或公式綁定并編號&#xff0…

【MT32F006】MT32F006之CS1237采集秤傳感器

本文最后修改時間&#xff1a;2023年06月07日 一、本節簡介 本文介紹如何使用MT32F006連接CS1237芯片采集秤傳感器。 二、實驗平臺 庫版本&#xff1a;V1.0.0 編譯軟件&#xff1a;MDK5.37 硬件平臺&#xff1a;MT32F006開發板&#xff08;主芯片MT32F006&#xff09; 仿真…

Chrome命令行開關

Electron 支持的命令行開關 –client-certificatepath 設置客戶端的證書文件 path . –ignore-connections-limitdomains 忽略用 , 分隔的 domains 列表的連接限制. –disable-http-cache 禁止請求 HTTP 時使用磁盤緩存. –remote-debugging-portport 在指定的 端口 通…

ORACLE中判斷表是否存在再刪除表避免報錯與MySql和SqlServer的不同

不同數據庫中drop a table if it exists的不同&#xff1a; In MySQL it is pretty easy to drop a table if it exists already. In Oracle and Microsoft’s SQL Server it is a little more complicated. Today I want to present you the solutions for these two DBMS’.…

常見的CRM系統報價

一個CRM系統大概多少錢&#xff1f;CRM系統的價格因為不同的廠商、功能、部署方式、用戶數等因素而有很大的差異&#xff0c;沒有一個固定的標準。但是&#xff0c;我們可以根據一些常見的CRM軟件的報價&#xff0c;對CRM價格有一個大致的了解。 一、CRM的部署方式 CRM系統的…

【RocketMQ】快速入門

文章目錄 消費模式同步消息異步消息單向消息延遲消息批量消息順序消息事務消息Tag標簽和Key鍵Tag的使用Key的使用 首先引入rocketmq的依賴 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><ve…

HackNos 3靶場

配置 進入控制面板配置網卡 第一步&#xff1a;啟動靶機時按下 shift 鍵&#xff0c; 進入以下界面 第二步&#xff1a;選擇第二個選項&#xff0c;然后按下 e 鍵&#xff0c;進入編輯界面 將這里的ro修改為rw single init/bin/bash&#xff0c;然后按ctrlx&#xff0c;進入…

數據結構的圖存儲結構

目錄 數據結構的圖存儲結構 圖存儲結構基本常識 弧頭和弧尾 入度和出度 (V1,V2) 和 的區別,v2> 集合 VR 的含義 路徑和回路 權和網的含義 圖存儲結構的分類 什么是連通圖&#xff0c;&#xff08;強&#xff09;連通圖詳解 強連通圖 什么是生成樹&#xff0c;生…

springboot集成ES

1.引入pom依賴2.application 配置3.JavaBean配置以及ES相關注解 3.1 Student實體類3.2 Teacher實體類3.3 Headmaster 實體類4. 啟動類配置5.elasticsearchRestTemplate 新增 5.1 createIndex && putMapping 創建索引及映射 5.1.1 Controller層5.1.2 service層5.1.3 ser…

leetcode做題筆記85最大矩形

給定一個僅包含 0 和 1 、大小為 rows x cols 的二維二進制矩陣&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面積。 示例 1&#xff1a; 思路一&#xff1a;單調棧 int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize){int dp[matrixSize…

使用MAT分析OOM問題

OOM和內存泄漏在我們的工作中&#xff0c;算是相對比較容易出現的問題&#xff0c;一旦出現了這個問題&#xff0c;我們就需要對堆進行分析。 一般情況下&#xff0c;我們生產應用都會設置這樣的JVM參數&#xff0c;以便在出現OOM時&#xff0c;可以dump出堆內存文件&#xff…

基于libevent的tcp服務器

libevent使用教程_evutil_make_socket_nonblocking_易方達藍籌的博客-CSDN博客 一、準備 centos7下安裝libevent庫 yum install libevent yum install -y libevent-devel 二、代碼 server.cpp /** You need libevent2 to compile this piece of code Please see: http://li…

專訪 BlockPI:共建賬戶抽象未來的新一代 RPC 基礎設施

在傳統 RPC 服務板塊上&#xff0c;開發者一直飽受故障風險、運行環境混亂等難題的折磨。實現 RPC 服務的去中心化&#xff0c;且保持成本優勢和可擴展性&#xff0c;始終是區塊鏈基礎設施建設的重要命題之一。從 2018 年觀察中心化 RPC 供應商服務現狀開始&#xff0c;BlockPI…

內存管理(1)

內存管理&#xff08;1&#xff09; 1、各類型數據在內存中的存儲空間2、C內存管理方式2.1 針對于內置類型分析2.2 針對于自定義類型分析2.3 C語言與C在申請動態內存失敗時的區別 3、operator new 和 operator delete函數&#xff08;重點&#xff09;3.1 底層知識解析3.2 實現…

linux-shell腳本收集

創建同步腳本xsync mkdir -p /home/hadoop/bin && cd /home/hadoop/bin vim xsync#!/bin/bash#1. 判斷參數個數 if [ $# -lt 1 ] thenecho Not Arguementexit; fi#2. 遍歷集群所有機器 for host in node1 node2 node3 doecho $host #3. 遍歷所有目錄&#xff0c;挨…

web3:使用Docker-compose方式部署blockscout

最近做的項目,需要blockscout來部署一個區塊鏈瀏覽器,至于blockscout是什么,咱們稍后出一篇文章專門介紹下,本次就先介紹一下如何使用Docker-compose方式部署blockscout,以及過程中遇到的種種坑 目錄 先決條件我的環境準備工作Docker-compose1.安裝方式一:下載 Docker Co…