Django搭建博客(五):为博客添加后台管理功能

上一篇我们还留了一个小问题没有解决,其实这个问题我是特意留到这一篇来讲的,请往下看 ⇩

现在我们的博客已经具备了基本的页面,但是如果我想发表一篇新的文章的话,还得到数据库里手动添加。

而且如果我们想修改一篇文章的话也很麻烦,这时候一个后台管理界面就很有用了。

一、需求分析

在添加后台管理界面之前,让我们想一想需要一些什么功能:

  • 能够添加文章
  • 能够修改文章
  • 能够删除文章

还有一些功能,比如在线编辑、实时预览、markdown支持我们以后再添加。

现在我们已经把功能列出来了,接下来就是分析一下需要什么页面:

  • 查看所有文章的页面,在这个页面里应该有修改和删除文章的选项,还要有添加新文章的选项
  • 点击修改文章应该出现编辑页面
  • 点击删除文章应该出现确认页面
  • 点击添加文章应该出现文章编辑页面,这个和修改文章的页面应该是相同的

然后在修改、添加、删除文章后应该返回文章列表。

二、显示文章页面

确定下来页面我们就可以开始敲代码了,按照页面之间的逻辑关系,我们先完成显示文章列表的页面。

这个页面和我们的首页很相似,我们只需要添加几个按钮即可:

{% extends 'myblog/base.html' %}

{% block title %}Post List{% endblock %}

{% block main %}

    {% for post in pagedata.post_list %}
  • {{post.title}}

    {{post.tags}} {{post.get_format_date}}

    {{post.get_brief_content}}

  • {% endfor %}
{% endblock %}

再把链接和视图添加上去,运行一下看看效果:

三、添加文章功能

添加一个新建文章的按钮:

现在按钮的位置都添加好了,我们分别为每个按钮添加链接,首先是添加文章的按钮,这个链接是一个固定的值,我们可以直接写到页面中去(当然,等以后页面多了肯定不能这么写,不过现在只有几个页面,所以问题不大)。

添加文章

然后再创建一个视图和模板,再添加链接:

修改 urls.py文件:

# myblog/urls.py
from django.urls import re_path
from . import views


urlpatterns = [
    re_path(r'^index/{0,1}$', views.index),
    re_path(r'^article/\d{4,4}/\d{1,2}/(?P.+)/{0,1}$', views.article),
    re_path(r'^articles/list/{0,1}$', views.article_list),
    
    re_path(r'^addArticle/{0,1}$', views.addArticle),
]
</code></pre> 
 <p>创建一个模板文件 add_article.html:</p> 
 <pre><code class="html">{% extends 'myblog/base.html' %}

{% block title %}Add Article{% endblock %}

{% block main %}

<div class="row">
    <div class="col">
        <form action="/myblog/addArticle" method="post">
            {% csrf_token %}
            <div class="row my-3">
                <div class="col">
                    <label for="title">标题</label>
                    <input type="text" name="title" id="title">
                </div>
            </div>
            <div class="row my-3">
                <div class="col">
                    <label for="tags">标签</label>
                    <input type="text" name="tags" id="tags">
                </div>
            </div>
            <div class="row my-3">
                <div class="col">
                    <label for="content">正文</label>
                    <textarea class="d-block" type="text" name="content" id="content"></textarea>
                </div>
            </div>
            <div class="row my-3">
                <div class="col">
                    <button type="submit">提交</button>
                </div>
            </div>
        </form>
    </div>
</div>

{% endblock %}
</code></pre> 
 <p>再添加一个视图函数 addArticle:</p> 
 <pre><code class="python">def addArticle(request):
    if request.method == 'GET':
        return render(request, 'myblog/add_article.html')
    elif request.method == 'POST':
        title = request.POST['title']
        key = abs(hash(title))
        tags = request.POST['tags']
        content = request.POST['content']
        date = datetime.datetime.now().strftime('%Y-%m-%d')

        Post(key=key, title=title, tags=tags, content=content, date=date).save()

        return HttpResponseRedirect('/myblog/articles/list/')
</code></pre> 
 <p>当请求方式为 get请求时,addArticle函数会返回 add_article页面:</p> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 557px; max-height: 378px;"> 
   <div class="image-view">  
   </div> 
  </div> 
  <div class="image-caption"></div> 
 </div> 
 <p>当请求方式为 post时,也就是点击提交后,addArticle函数会接收页面提交的数据,并将其保存到数据库中,然后重定向到 article_list页面查看添加结果。</p> 
 <p>注意到在保存到数据库时多了一个 key参数。</p> 
 <p>这就是我们用来替换 title用来查找文章的值,key是由 title经过哈希运算得到的值,我们可以认为 key和 title是一一对应的。</p> 
 <p>这样文章链接就可以根据 key来生成。</p> 
 <p>要应用这个变化,我们还需要修改一些文件:</p> 
 <p>首先修改文章的链接:</p> 
 <pre><code class="python">re_path(r'^article/\d{4,4}/\d{1,2}/(?P<key>\d+)/{0,1}$', views.article),
</code></pre> 
 <p>然后修改 Post类的 get_absolute_url方法:</p> 
 <pre><code class="python">def get_absolute_url(self):
    return f'/myblog/article/{self.date.year}/{self.date.month}/{self.key}'
</code></pre> 
 <p>注意:</p> 
 <p>这里链接以 ” / “开头说明该链接是相对于网站根目录的链接,即最终的链接是:</p> 
 <p><code>http://127.0.0.1:8000/myblog/article/2018/8/1/45555555544</code></p> 
 <p>如果不以 ” /“开头则说明该链接是相对于当前页面的链接,假设当前页面是</p> 
 <p><code>http://127.0.0.1:8000/myblog/index</code></p> 
 <p>那么最终的链接是:<br> <code>http://127.0.0.1:8000/myblog/myblog/article/2018/8/1/45555555544</code></p> 
 <p>可以看到,myblog重复了两次,由于当前页面的不确定性,所以我们在所有的页面里都使用带反斜杠的链接。</p> 
 <p>改了上面两处还不够,我们还需要改一下 article视图函数,其实就是将 title改为了 key:</p> 
 <pre><code class="python">def article(request, key):
    post = Post.objects.filter(key=key).get()
    return render(
        request,
        'myblog/article.html',
        {'pagedata':
             {'post': post}
        }
    )
</code></pre> 
 <p>接下来访问一下文章详情页面 :</p> 
 <br> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 700px; max-height: 236px;"> 
   <div class="image-view">  
   </div> 
  </div> 
  <div class="image-caption"></div> 
 </div> 
 <p>这样我们就把添加文章的功能给做好了,接下来我们再来完成修改文章的功能。</p> 
 <h3>四、修改文章功能</h3> 
 <p>首先我们先添加一个链接:</p> 
 <pre><code class="python">re_path(r'^modifyArticle/{0,1}$', views.modifyArticle)
</code></pre> 
 <p>再修改 articles_list.html模板文件,为每篇文章添加对应的修改链接:</p> 
 <pre><code class="html"><div class="row">
    <div class="col text-info">
        <a href="{{post.get_modify_url}}">修改</a>
    </div>
</div>
</code></pre> 
 <p>再给 Post类添加 get_modify_url方法:</p> 
 <pre><code class="python">    def get_modify_url(self):
        return f'/modifyArticle/{self.key}'
</code></pre> 
 <p>做完这些我们还需要添加一个 modify_article模板:</p> 
 <pre><code class="html">{% extends 'myblog/base.html' %}

{% block title %}Modify Article{% endblock %}

{% block main %}

<div class="row">
    <div class="col">
        <form action="{{pagedata.post.get_modify_url}}" method="post">
            {% csrf_token %}
            <div class="row my-3">
                <div class="col">
                    <label for="title">标题</label>
                    <input type="text" name="title" id="title" value="{{pagedata.post.title}}">
                </div>
            </div>
            <div class="row my-3">
                <div class="col">
                    <label for="tags">标签</label>
                    <input type="text" name="tags" id="tags" value="{{pagedata.post.tags}}">
                </div>
            </div>
            <div class="row my-3">
                <div class="col">
                    <label for="content">正文</label>
                    <textarea class="d-block" type="text" name="content" id="content">{{pagedata.post.content}}</textarea>
                </div>
            </div>
            <input type="hidden" name="key" value="{{pagedata.post.key}}">
            <div class="row my-3">
                <div class="col">
                    <button type="submit">提交</button>
                </div>
            </div>
        </form>
    </div>
</div>

{% endblock %}
</code></pre> 
 <p>这个模板和 add_article模板基本一致,我们只做了一些小的改动。</p> 
 <p>我们为每个 input标签添加了一个 value,value的值就是文章对应属性的值。</p> 
 <p>最后我们还需要添加一个视图函数 modifyArticle来处理请求:</p> 
 <pre><code class="python">def modifyArticle(request, key):
    if request.method == 'GET':
        post_list = Post.objects.filter(key=key)
        if len(post_list) == 0:
            return HttpResponse('文章不存在')
        else:
            return render(
                request,
                'myblog/modify_article.html',
                {'pagedata':
                     {'post':post_list[0]}
                }
            )
    elif request.method == 'POST':
        title = request.POST['title']
        key = request.POST['key']
        tags = request.POST['tags']
        content = request.POST['content']
        date = datetime.datetime.now().strftime('%Y-%m-%d')

        post = Post.objects.filter(key=key)[0]
        post.title = title
        post.tags = tags
        post.content = content
        post.date = date

        post.save()

        return HttpResponseRedirect('/myblog/articles/list/')
</code></pre> 
 <p>我们来测试一下:</p> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 600px; max-height: 304px;"> 
   <div class="image-view">  
   </div> 
  </div> 
  <div class="image-caption"></div> 
 </div> 
 <p>现在只剩下删除功能没有做了,删除功能其实很简单,只需要添加一个确认页面,然后在数据库里执行删除操作即可,这些我就不再多写了。</p> 
 <p>最后看看整体效果:</p> 
 <br> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 600px; max-height: 304px;"> 
   <div class="image-view">  
   </div> 
  </div> 
  <div class="image-caption"></div> 
 </div> 
 <p>不过我们得后台管理还有很多问题,比如:没有进行身份验证。<br> 在下一篇我们会为博客添加身份认证机制</p> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1711302235029319680"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(Django搭建博客(五):为博客添加后台管理功能)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1883106219242090496.htm"
                           title="GFPGAN - 腾讯开源的图形修复算法修复算法" target="_blank">GFPGAN - 腾讯开源的图形修复算法修复算法</a>
                        <span class="text-muted">小众AI</span>
<a class="tag" taget="_blank" href="/search/AI%E5%BC%80%E6%BA%90/1.htm">AI开源</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>GFPGAN是腾讯开源的人脸修复算法,它利用预先训练好的面部修复算法,并且封装了各种丰富多样的先验因素进行盲脸(blindface)修复,可以对老照片进行很好的修复。35800Stars5900Forks345Issues11贡献者ApacheLicensePython语言代码:https://github.com/TencentARC/GFPGAN更多AI开源软件:AI开源-小众AI主要功能盲修</div>
                    </li>
                    <li><a href="/article/1883106092897071104.htm"
                           title="初学Guns" target="_blank">初学Guns</a>
                        <span class="text-muted">only空格</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>大道至简系列目标:系统架构师系列课程课程:大道至简之Guns框架介绍-慕课网1、系统高可用,包括:负载均衡、限流测试、分布式事务、分布式Session、压力测试等等。2、系统高并发,包括:缓存应用、HTTP缓存、异步高并发处理、JVM的优化、队列应用、动静分离等等。构建应用系统:框架guns,快速构建应用系统,Guns基本概念1.快速构建后台管理系统的开源框架2.Guns默认提高诸多业务系统的基本</div>
                    </li>
                    <li><a href="/article/1883105211409559552.htm"
                           title="C++实现链表" target="_blank">C++实现链表</a>
                        <span class="text-muted">洗艾斯迪恩重度依赖</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a>
                        <div>1.单向静态链表constintN=10000;structnode{intid;intdata;intnextid;}nodes[N];nodes[0].nextid=1;//为next指针赋初值for(inti=1;i//定义链表listnode;//为链表赋值for(inti=1;i::iteratorit=node.begin();while(node.size()>1){it++;if(</div>
                    </li>
                    <li><a href="/article/1883103824646828032.htm"
                           title="代码随想录 Day 11 | 【第五章 栈与队列】150.逆波兰表达式求值、239.滑动窗口最大值、347.前 K 个高频元素、总结" target="_blank">代码随想录 Day 11 | 【第五章 栈与队列】150.逆波兰表达式求值、239.滑动窗口最大值、347.前 K 个高频元素、总结</a>
                        <span class="text-muted">Accept17</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、150.逆波兰表达式求值本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题题目链接/文章讲解/视频讲解:代码随想录1.看完代码随想录的想法(1)首先需要充分理解什么是逆波兰表达式,相当于树中的后缀表达式,与平时使用的中序表达式并不相同。定义一个初始化的空栈,然后去遍历输入的逆波兰表达式,遇到数字就向栈中添加数字元素,遇到运算符就取出栈顶的两个数字进行运算,再存放进栈中。直到最</div>
                    </li>
                    <li><a href="/article/1883103067205857280.htm"
                           title="C#设置winform窗体自动适应不同分辨率的电脑" target="_blank">C#设置winform窗体自动适应不同分辨率的电脑</a>
                        <span class="text-muted">南华</span>
<a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E8%84%91/1.htm">电脑</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>C#设置winform窗体自动适应不同分辨率的电脑文章已被社区收录加入社区问题背景:用winform开发了一个上位机软件,本机的台式开发电脑是宽屏的,上位机软件的显示效果良好,而在笔记本电脑上使用上位机软件时,出现了界面超出屏幕,部分功能或内容无法显示完整的现象。探索之后,发现了一个规律:笔记本电脑的屏幕分辨率最大为1366×768,此时用vs2015中C#设计的winform窗体的size属性最</div>
                    </li>
                    <li><a href="/article/1883103066786426880.htm"
                           title="USB Redirector 6.1.1:解锁USB设备共享的新境界" target="_blank">USB Redirector 6.1.1:解锁USB设备共享的新境界</a>
                        <span class="text-muted">邴卉露Robust</span>

                        <div>USBRedirector6.1.1:解锁USB设备共享的新境界【下载地址】USBRedirector6.1.1中文注册版USB共享工具USBRedirector6.1.1中文注册版是一款功能强大的USB设备映射软件,它能够帮助用户轻松实现本地或网络上的USB设备共享。无论是存储设备、影像装置、打印机、扫描仪、音响装置、条码阅读器、红外装置还是蓝牙设备,USBRedirector都能有效地管理和共</div>
                    </li>
                    <li><a href="/article/1883102940105863168.htm"
                           title="使用 Python 和 Tesseract 实现验证码识别" target="_blank">使用 Python 和 Tesseract 实现验证码识别</a>
                        <span class="text-muted">一休哥助手</span>
<a class="tag" taget="_blank" href="/search/mfc/1.htm">mfc</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>验证码识别是一个常见且实用的技术需求,尤其是在自动化测试和数据采集场景中。通过开源OCR(OpticalCharacterRecognition,光学字符识别)工具Tesseract,结合Python的强大生态,我们可以高效实现验证码识别任务。本篇博客将以详细步骤和代码示例,介绍如何使用Python和Tesseract实现验证码识别,包括原理解析、图像预处理、代码实现以及优化策略。一、验证码识别的</div>
                    </li>
                    <li><a href="/article/1883102940621762560.htm"
                           title="Axios 教程:Promise 基础的 HTTP 客户端" target="_blank">Axios 教程:Promise 基础的 HTTP 客户端</a>
                        <span class="text-muted">吉皎妃Frasier</span>

                        <div>Axios教程:Promise基础的HTTP客户端axiosaxios/axios:Axios是一个基于Promise的HTTP客户端库,适用于浏览器和Node.js环境,用于在JavaScript应用中执行异步HTTP请求。相较于原生的XMLHttpRequest或FetchAPI,Axios提供了更简洁的API和更强大的功能。项目地址:https://gitcode.com/gh_mirror</div>
                    </li>
                    <li><a href="/article/1883101805215281152.htm"
                           title="Guns框架基本介绍、下载、部署" target="_blank">Guns框架基本介绍、下载、部署</a>
                        <span class="text-muted">liban121</span>
<a class="tag" taget="_blank" href="/search/Guns/1.htm">Guns</a>
                        <div>什么是Guns?1、快速构建后台管理系统的框架(注意:是后台管理系统)2、Guns默认提供诸多业务系统的基本功能3、Guns集成诸多优秀的开源框架基本功能权限管理(用户管理,角色管理,部门管理)菜单管理,字典管理,业务日志,登录日志,监控管理,通知管理,代码生成(核心)Guns的部署第一步:下载Guns:https://gitee.com/stylefeng/guns版本选择:第二步:导入IDEA</div>
                    </li>
                    <li><a href="/article/1883101552940478464.htm"
                           title="Python知识点:基于Python技术,如何使用AirSim进行无人机模拟" target="_blank">Python知识点:基于Python技术,如何使用AirSim进行无人机模拟</a>
                        <span class="text-muted">超哥同学</span>
<a class="tag" taget="_blank" href="/search/Python%E7%B3%BB%E5%88%97/1.htm">Python系列</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E4%BA%BA%E6%9C%BA/1.htm">无人机</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a>
                        <div>开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候!如何使用Python和AirSim进行无人机模拟无人机技术的发展为许多行业带来了革命性的变化,尤其是在航拍、物流配送和农业监测等领域。然而,无人机的操作和开发需要一个安全且可控的环境来进行测试和训练。AirSim就是这样一个模拟器,它提供了一个基于UnrealEngine的逼真环境,</div>
                    </li>
                    <li><a href="/article/1883100417546579968.htm"
                           title="二分查找算法" target="_blank">二分查找算法</a>
                        <span class="text-muted">mcharleylei</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>目录1、概述2、代码实现(1)递归实现(2)非递归实现1、概述二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查</div>
                    </li>
                    <li><a href="/article/1883098528272674816.htm"
                           title="5.5 行高的取值" target="_blank">5.5 行高的取值</a>
                        <span class="text-muted">2401_83398041</span>
<a class="tag" taget="_blank" href="/search/css%E5%9F%BA%E7%A1%80/1.htm">css基础</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                        <div>行高的取值line-heightpx、像素值em没有单位Document.container{/*无论怎么设置,最终会转换为px单位*//*line-height:30px;*//*em:行高是字体大小的两倍*//*em:先计算像素值,再继承,那么p1、p2的line-height为container的字体大小的两倍*//*line-height:2em;*//*没有单位:先继承,再计算为像素值*</div>
                    </li>
                    <li><a href="/article/1883098150252638208.htm"
                           title="jira.issueviews" target="_blank">jira.issueviews</a>
                        <span class="text-muted">yaoshengting</span>
<a class="tag" taget="_blank" href="/search/jira/1.htm">jira</a><a class="tag" taget="_blank" href="/search/jira/1.htm">jira</a>
                        <div>jira.issueviews是JIRA提供的一种功能,用于以多种格式(如Excel、XML、RSS、Word等)导出查询结果或单个Issue的详细信息。这一功能特别适用于JIRAServer和JIRADataCenter环境,方便用户将数据导出并进一步分析或分享。以下是对jira.issueviews的详细介绍:1.功能概述jira.issueviews提供了多种数据导出格式,用户可以通过特定的</div>
                    </li>
                    <li><a href="/article/1883097266592477184.htm"
                           title="golang网络编程" target="_blank">golang网络编程</a>
                        <span class="text-muted">编程小猹</span>
<a class="tag" taget="_blank" href="/search/go%E5%AD%A6%E4%B9%A0/1.htm">go学习</a><a class="tag" taget="_blank" href="/search/go/1.htm">go</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/1.htm">网络编程</a>
                        <div>socket编程socket图解Socket是BSDUNIX的进程通信机制,通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。Socket可以理解为TCP/IP网络的API,它定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。电脑上运行的应用程序通常通过”套接字”向网络发出请求或者应答网络请求。Socket又称“套接字”,应用程序通常通过“套接字”向网络发出</div>
                    </li>
                    <li><a href="/article/1883096004887113728.htm"
                           title="设计模式Python版 抽象工厂模式" target="_blank">设计模式Python版 抽象工厂模式</a>
                        <span class="text-muted">小王子1024</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8FPython%E7%89%88/1.htm">设计模式Python版</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F/1.htm">抽象工厂模式</a>
                        <div>文章目录前言一、抽象工厂模式二、抽象工厂模式示例三、抽象工厂模式在Django框架中的应用前言GOF设计模式分三大类:创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对象之间的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。行为型模式:关注对象之间的交互,包括职责链模式、命令模式、解</div>
                    </li>
                    <li><a href="/article/1883094618296348672.htm"
                           title="Mybatis源码学习(七)——ResultSetHandler 结果处理" target="_blank">Mybatis源码学习(七)——ResultSetHandler 结果处理</a>
                        <span class="text-muted">Laplaces Demon</span>
<a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>通过之前对StatementHandler类(Mybatis源码学习(五)——StatementHandler-CSDN博客)的分析发现在所有StatementHandler接口的实现类,无论是PreparedStatementHandler、CallableStatementHandler还是SimpleStatementHandler都是使用ResultSetHandler对象对结果(包括Li</div>
                    </li>
                    <li><a href="/article/1883093610027610112.htm"
                           title="Red Hat 8.1 部署MySQL 5.7" target="_blank">Red Hat 8.1 部署MySQL 5.7</a>
                        <span class="text-muted">云计算老王</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                        <div>RedHat8.1部署MySQL5.7文章目录RedHat8.1部署MySQL5.7一、关闭防火墙和Selinux二、配置YUM源三、安装依赖包四、安装MySQL4.1创建安装目录并解压文件到目录中4.2创建快捷方式4.3创建用户组4.4初始化4.5配置环境变量五、启动数据库5.1后台启动,并登陆数据库5.2新增远程用户5.3修改本地用户密码5.4关闭数据库一、关闭防火墙和Selinuxsyste</div>
                    </li>
                    <li><a href="/article/1883092725734109184.htm"
                           title="在Ubuntu上使用Apache+MariaDB安装部署Nextcloud并修改默认存储路径" target="_blank">在Ubuntu上使用Apache+MariaDB安装部署Nextcloud并修改默认存储路径</a>
                        <span class="text-muted">戴草帽的大z</span>
<a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/nextcloud/1.htm">nextcloud</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a><a class="tag" taget="_blank" href="/search/mariadb/1.htm">mariadb</a>
                        <div>一、前言Nextcloud是一款开源的私有云存储解决方案,允许用户轻松搭建自己的云服务。它不仅支持文件存储和共享,还提供了日历、联系人、任务管理、笔记等丰富的功能。本文将详细介绍如何在Ubuntu22.04LTS上使用Apache和MariaDB安装部署Nextcloud,并修改默认存储路径为/home/nextcloud_data。二、环境操作系统:Ubuntu22.04LTSWeb服务器:Ap</div>
                    </li>
                    <li><a href="/article/1883091083160776704.htm"
                           title="c语言 指针 pdf,深入理解c指针 PDF扫描版[33MB]" target="_blank">c语言 指针 pdf,深入理解c指针 PDF扫描版[33MB]</a>
                        <span class="text-muted">origami dance</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E6%8C%87%E9%92%88/1.htm">指针</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a>
                        <div>深入理解C指针内容简介:深入理解C指针和内存管理,提升编程效率!这是一本实战型图书,通过它,读者可以掌握指针动态操控内存的机制、对数据结构的增强支持,以及访问硬件等技术。本书详细阐述了如何在数组、字符串、结构体和函数中使用指针,同时演示了相应的内存模型及其对指针使用的影响。指针为C语言带来了强大的功能和灵活性,却也是C语言中最难啃的一块“骨头”。本书旨在帮读者透彻理解指针,解决这个老大难问题。不论</div>
                    </li>
                    <li><a href="/article/1883089949515902976.htm"
                           title="Django常用ORM" target="_blank">Django常用ORM</a>
                        <span class="text-muted">程序猿_小天</span>
<a class="tag" taget="_blank" href="/search/Django/1.htm">Django</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/orm/1.htm">orm</a>
                        <div>聚合分组Sum函数将None变为0xx=Coalesce(Sum('number'),0,output_field=CharField())跨表分组去重#B表中有一个外键表是A,即a=models.ForeignKey(A)a_queryset=BigData.objects.filter(pk=OuterRef("a")).annotate(Sum('number',distinct=True)</div>
                    </li>
                    <li><a href="/article/1883089823158300672.htm"
                           title="局域网用MAC通讯为什么还要IP?" target="_blank">局域网用MAC通讯为什么还要IP?</a>
                        <span class="text-muted">sun shang chao</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/1.htm">计算机网络</a>
                        <div>虽然这个问题很傻,但是我还是喜欢你这样的问题。网络是分层的,从应用层到物理层各层有各层的功能,如果一个层次没有配置就没法调用下一层的功能。因此,如果你没有配置网络层的IP地址,就没法调用数据链路层的MAC地址进行通信。追问那这样局域网就不是通过MAC通讯的了吗?要IP才能调用MAC,那就是通过IP通讯了啊回答LAN中是采用MAC通信,但是上层协议没法直接调用MAC协议,必须使用ARP协议将IP地址</div>
                    </li>
                    <li><a href="/article/1883089696947499008.htm"
                           title="五、Mongodb的备份恢复与导出导入" target="_blank">五、Mongodb的备份恢复与导出导入</a>
                        <span class="text-muted">s_daqing</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                        <div>1、备份备份的语法:mongodump-hdbhost-ddbname-odbdirectory-h:服务器地址,也可以指定端⼝号-d:需要备份的数据库名称-o:备份的数据存放位置,此⽬录中存放着备份出来的数据示例:mongodump-h127.0.0.1:27017-dtest1-o~/Desktop/test1bak2、恢复恢复语法:mongorestore-hdbhost-ddbname--</div>
                    </li>
                    <li><a href="/article/1883089319015542784.htm"
                           title="数据库管理系统的数据控制功能" target="_blank">数据库管理系统的数据控制功能</a>
                        <span class="text-muted">橘子熊-0</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>数据库管理系统提供下述4个方面的数据控制功能:(1)数据的安全性控制:防止不合法使用数据库造成数据的泄露和破坏,使每个用户只能按其规定对某些数据进行某种或某些操作和处理。安全性控制是指要尽可能杜绝所有可能的数据库非法访问。数据的安全性是保护数据库以防止不合法使用造成的数据泄露、更改或破坏。安全性措施:①用户标识和鉴定。通过定义用户标识对用户身份进行鉴定,只允许合法用户才能进入系统。②用户存取权限控</div>
                    </li>
                    <li><a href="/article/1883088940924203008.htm"
                           title="Go语言初上手(三)编码规范与性能优化 | 青训营" target="_blank">Go语言初上手(三)编码规范与性能优化 | 青训营</a>
                        <span class="text-muted">余cos</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>本节课讲了如何写出更简洁清晰的代码,每种语言都有自己的特性,也有自己独特的代码规范,对于Go来说,有哪些性能优化的手段、趁手的工具,也都进行了介绍。高质量代码需要具备正确可靠、简洁清晰的特性正确性:各种边界条件是否考虑完备、错误的调用能否被处理可靠性:异常情况或错误处理明确,依赖的服务异常能够及时处理简洁:逻辑是否简单、后续新增功能是否能够快速支持清晰可读:其他人阅读理解代码时是否能清楚明白、重构</div>
                    </li>
                    <li><a href="/article/1883087931325870080.htm"
                           title="b站任务脚本" target="_blank">b站任务脚本</a>
                        <span class="text-muted">AALoveTouch</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>仅供学习参考用于自动化执行Bilibili(哔哩哔哩)网站的一些任务,包括签到、投币、观看视频等。它通过与Bilibili的API接口进行交互来完成各种任务,并返回执行结果。主要功能get_nav(session):获取当前登录用户的基本信息,包括用户名、UID、登录状态、硬币数、VIP类型和当前经验值等。get_today_exp(session):获取当天的经验信息,包括用户参与的各种活动(如</div>
                    </li>
                    <li><a href="/article/1883086796871495680.htm"
                           title="【Nginx系列】Nginx配置超时时间" target="_blank">【Nginx系列】Nginx配置超时时间</a>
                        <span class="text-muted">m0_74824552</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/1.htm">阿里巴巴</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kwan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术,jvm,并发编程redis,kafka,Spring,微服务等常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,G</div>
                    </li>
                    <li><a href="/article/1883085662987546624.htm"
                           title="算法随笔_21:字符的最短距离" target="_blank">算法随笔_21:字符的最短距离</a>
                        <span class="text-muted">程序趣谈</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>上一篇:算法随笔_20:区间子数组个数-CSDN博客=====================题目描述如下:给你一个字符串s和一个字符c,且c是s中出现过的字符。返回一个整数数组answer,其中answer.length==s.length且answer[i]是s中从下标i到离它最近的字符c的距离。两个下标i和j之间的距离为abs(i-j),其中abs是绝对值函数。示例1:输入:s="lovel</div>
                    </li>
                    <li><a href="/article/1883085285055590400.htm"
                           title="基于 Node.js 的天气查询系统实现(附源码)" target="_blank">基于 Node.js 的天气查询系统实现(附源码)</a>
                        <span class="text-muted">Kasper0121</span>
<a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>项目概述这是一个基于Node.js的全栈应用,前端使用原生JavaScript和CSS,后端使用Express框架,通过调用第三方天气API实现天气数据的获取和展示。主要功能默认显示多个主要城市的天气信息支持城市天气搜索响应式布局设计深色主题界面优雅的加载动画技术栈后端:Node.js+Express前端:HTML5+CSS3+JavaScriptHTTP客户端:AxiosAPI:天气API(v1</div>
                    </li>
                    <li><a href="/article/1883083774061768704.htm"
                           title="golang性能调优工具pprof的使用" target="_blank">golang性能调优工具pprof的使用</a>
                        <span class="text-muted">KhaD</span>
<a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>文章目录前言一、cpu1.下载实例代码2.运行项目中的main.go文件3.查看CPU性能数据4.使用topN(N是可选的数量,也可以不加直接运行)命令来查看占用资源最多的函数5.查看可能存在问题的具体函数代码6.使用web命令来调用关系可视化二、堆内存1.查看堆内存性能数据2.在浏览器中进行查看三、goroutine1.查看goroutine性能数据四、mutex1.查看mutex性能数据五、m</div>
                    </li>
                    <li><a href="/article/1883083269717684224.htm"
                           title="[转] mongodb数据库备份和恢复" target="_blank">[转] mongodb数据库备份和恢复</a>
                        <span class="text-muted">hi_zf</span>
<a class="tag" taget="_blank" href="/search/MongoDB/1.htm">MongoDB</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                        <div>windows下面mongodb数据库备份和恢复1、mongodump(备份)及mongorestore(还原)→说明:mongodump是一个用于导出二进制数据库内容的实用工具,它导出的bson文档中只会包含着集合文档等信息,不包括索引信息(索引信息会单独导出),所以还原后,索引必须重建(这个不用担心,使用mongorestore会自动重建mongodump生成的索引信息)。3.4版本中添加了对</div>
                    </li>
                                <li><a href="/article/87.htm"
                                       title="面向对象面向过程" target="_blank">面向对象面向过程</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>面向对象:把要完成的一件事,通过对象间的协作实现。 
面向过程:把要完成的一件事,通过循序依次调用各个模块实现。 
我把大象装进冰箱这件事为例,用面向对象和面向过程实现,都是用java代码完成。 
 
1、面向对象 
 

package bigDemo.ObjectOriented;

/**
 * 大象类
 * 
 * @Description
 * @author FuJian</div>
                                </li>
                                <li><a href="/article/214.htm"
                                       title="Java Hotspot: Remove the Permanent Generation" target="_blank">Java Hotspot: Remove the Permanent Generation</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/HotSpot/1.htm">HotSpot</a>
                                    <div>  
openjdk上关于hotspot将移除永久带的描述非常详细,http://openjdk.java.net/jeps/122 
  
JEP 122: Remove the Permanent Generation

Author	Jon Masamitsu
Organization	Oracle
Created	2010/8/15
Updated	2011/</div>
                                </li>
                                <li><a href="/article/341.htm"
                                       title="正则表达式向前查找向后查找,环绕或零宽断言" target="_blank">正则表达式向前查找向后查找,环绕或零宽断言</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a>
                                    <div>向前查找和向后查找 
1. 向前查找:根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或不存在一个特定的序列(否定式向前查找)来决定是否匹配。.NET将向前查找称之为零宽度向前查找断言。 
    对于向前查找,出现在指定项之后的字符序列不会被正则表达式引擎返回。 
2. 向后查找:一个要匹配的字符序列前面有或者没有指定的</div>
                                </li>
                                <li><a href="/article/468.htm"
                                       title="BaseDao" target="_blank">BaseDao</a>
                                    <span class="text-muted">171815164</span>
<a class="tag" taget="_blank" href="/search/seda/1.htm">seda</a>
                                    <div>

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class BaseDao {

	public Conn</div>
                                </li>
                                <li><a href="/article/595.htm"
                                       title="Ant标签详解--Java命令" target="_blank">Ant标签详解--Java命令</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/Java%E5%91%BD%E4%BB%A4/1.htm">Java命令</a>
                                    <div>        这一篇主要介绍与java相关标签的使用          终于开始重头戏了,Java部分是我们关注的重点也是项目中用处最多的部分。               
1</div>
                                </li>
                                <li><a href="/article/722.htm"
                                       title="[简单]代码片段_电梯数字排列" target="_blank">[简单]代码片段_电梯数字排列</a>
                                    <span class="text-muted">53873039oycg</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a>
                                    <div>       今天看电梯数字排列是9 18 26这样呈倒N排列的,写了个类似的打印例子,如下:       
import java.util.Arrays;

public class 电梯数字排列_S3_Test {
	public static void main(S</div>
                                </li>
                                <li><a href="/article/849.htm"
                                       title="Hessian原理" target="_blank">Hessian原理</a>
                                    <span class="text-muted">云端月影</span>
<a class="tag" taget="_blank" href="/search/hessian%E5%8E%9F%E7%90%86/1.htm">hessian原理</a>
                                    <div>Hessian 原理分析 
 
 
 
 
 
一.      远程通讯协议的基本原理 
 
网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协</div>
                                </li>
                                <li><a href="/article/976.htm"
                                       title="区分Activity的四种加载模式----以及Intent的setFlags" target="_blank">区分Activity的四种加载模式----以及Intent的setFlags</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>  
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。 
这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置 
Activity有四种加载模式: 
 
 standard 
 singleTop</div>
                                </li>
                                <li><a href="/article/1103.htm"
                                       title="hibernate几个核心API及其查询分析" target="_blank">hibernate几个核心API及其查询分析</a>
                                    <span class="text-muted">antonyup_2006</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/1.htm">配置管理</a>
                                    <div>(一)  org.hibernate.cfg.Configuration类 
        读取配置文件并创建唯一的SessionFactory对象.(一般,程序初始化hibernate时创建.) 
        Configuration co</div>
                                </li>
                                <li><a href="/article/1230.htm"
                                       title="PL/SQL的流程控制" target="_blank">PL/SQL的流程控制</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/PL%2FSQL%E7%BC%96%E7%A8%8B/1.htm">PL/SQL编程</a><a class="tag" taget="_blank" href="/search/%E5%BE%AA%E7%8E%AF%E6%8E%A7%E5%88%B6/1.htm">循环控制</a>
                                    <div>PL/SQL也是一门高级语言,所以流程控制是必须要有的,oracle数据库的pl/sql比sqlserver数据库要难,很多pl/sql中有的sqlserver里面没有 
  
流程控制; 
   分支语句 if 条件 then 结果 else 结果  end if ;

  条件语句 case    when   条件  then  结果;

   循环语句  loop    </div>
                                </li>
                                <li><a href="/article/1357.htm"
                                       title="强大的Mockito测试框架" target="_blank">强大的Mockito测试框架</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a>
                                    <div>一.自动生成Mock类        在需要Mock的属性上标记@Mock注解,然后@RunWith中配置Mockito的TestRunner或者在setUp()方法中显示调用MockitoAnnotations.initMocks(this);生成Mock类即可。二.自动注入Mock类到被测试类  &nbs</div>
                                </li>
                                <li><a href="/article/1484.htm"
                                       title="精通Oracle10编程SQL(11)开发子程序" target="_blank">精通Oracle10编程SQL(11)开发子程序</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 *开发子程序
 */
--子程序目是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用程序中多次调用
--PL/SQL有两种类型的子程序:过程和函数
--开发过程
--建立过程:不带任何参数
CREATE OR REPLACE PROCEDURE out_time
IS
BEGIN
 DBMS_OUTPUT.put_line(systimestamp);
E</div>
                                </li>
                                <li><a href="/article/1611.htm"
                                       title="【EhCache一】EhCache版Hello World" target="_blank">【EhCache一】EhCache版Hello World</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Hello+world/1.htm">Hello world</a>
                                    <div>本篇是EhCache系列的第一篇,总体介绍使用EhCache缓存进行CRUD的API的基本使用,更细节的内容包括EhCache源代码和设计、实现原理在接下来的文章中进行介绍 
  环境准备 
1.新建Maven项目 
  
2.添加EhCache的Maven依赖 
        <dependency>
            <groupId>ne</div>
                                </li>
                                <li><a href="/article/1738.htm"
                                       title="学习EJB3基础知识笔记" target="_blank">学习EJB3基础知识笔记</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/jboss/1.htm">jboss</a><a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a><a class="tag" taget="_blank" href="/search/ejb/1.htm">ejb</a>
                                    <div>最近项目进入系统测试阶段,全赖袁大虾领导有力,保持一周零bug记录,这也让自己腾出不少时间补充知识。花了两天时间把“传智播客EJB3.0”看完了,EJB基本的知识也有些了解,在这记录下EJB的部分知识,以供自己以后复习使用。 
  
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基</div>
                                </li>
                                <li><a href="/article/1865.htm"
                                       title="angular.bootstrap" target="_blank">angular.bootstrap</a>
                                    <span class="text-muted">boyitech</span>
<a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/AngularJS+API/1.htm">AngularJS API</a><a class="tag" taget="_blank" href="/search/angular%E4%B8%AD%E6%96%87api/1.htm">angular中文api</a>
                                    <div>angular.bootstrap 
描述:  
    手动初始化angular。 
    这个函数会自动检测创建的module有没有被加载多次,如果有则会在浏览器的控制台打出警告日志,并且不会再次加载。这样可以避免在程序运行过程中许多奇怪的问题发生。 
    使用方法:       angular .</div>
                                </li>
                                <li><a href="/article/1992.htm"
                                       title="java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数" target="_blank">java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class SearchInShiftedArray {

	/**
	 * 题目:给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数。
	 * 请在这个特殊数组中找出给定的整数。
	 * 解答:
	 * 其实就是“旋转数组”。旋转数组的最小元素见http://bylijinnan.iteye.com/bl</div>
                                </li>
                                <li><a href="/article/2119.htm"
                                       title="天使还是魔鬼?都是我们制造" target="_blank">天使还是魔鬼?都是我们制造</a>
                                    <span class="text-muted">ducklsl</span>
<a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a><a class="tag" taget="_blank" href="/search/%E6%95%99%E8%82%B2/1.htm">教育</a><a class="tag" taget="_blank" href="/search/%E6%83%85%E6%84%9F/1.htm">情感</a>
                                    <div>----------------------------剧透请原谅,有兴趣的朋友可以自己看看电影,互相讨论哦!!! 
    从厦门回来的动车上,无意中瞟到了书中推荐的几部关于儿童的电影。当然,这几部电影可能会另大家失望,并不是类似小鬼当家的电影,而是关于“坏小孩”的电影! 
    自己挑了两部先看了看,但是发现看完之后,心里久久不能平</div>
                                </li>
                                <li><a href="/article/2246.htm"
                                       title="[机器智能与生物]研究生物智能的问题" target="_blank">[机器智能与生物]研究生物智能的问题</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9/1.htm">生物</a>
                                    <div> 
 
      我想,人的神经网络和苍蝇的神经网络,并没有本质的区别...就是大规模拓扑系统和中小规模拓扑分析的区别.... 
 
 
      但是,如果去研究活体人类的神经网络和脑系统,可能会受到一些法律和道德方面的限制,而且研究结果也不一定可靠,那么希望从事生物神经网络研究的朋友,不如把</div>
                                </li>
                                <li><a href="/article/2373.htm"
                                       title="获取Android Device的信息" target="_blank">获取Android Device的信息</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>
String phoneInfo = "PRODUCT: " + android.os.Build.PRODUCT;
phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
phoneInfo += ", TAGS: " + android.os.Build.TAGS;
ph</div>
                                </li>
                                <li><a href="/article/2500.htm"
                                       title="最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现" target="_blank">最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D/1.htm">字符串匹配</a>
                                    <div>原文:http://www.javacodegeeks.com/2013/11/java-implementation-of-optimal-string-alignment.html------------------------------------------------------------------------------------------------------------</div>
                                </li>
                                <li><a href="/article/2627.htm"
                                       title="小学5年级英语单词背诵第一课" target="_blank">小学5年级英语单词背诵第一课</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>long 长的 
show 给...看,出示 
mouth 口,嘴 
write 写 
  
use 用,使用 
take 拿,带来 
hand 手 
clever 聪明的 
  
often 经常 
wash 洗 
slow 慢的 
house 房子 
  
water 水 
clean 清洁的 
supper 晚餐 
out 在外 
  
face 脸,</div>
                                </li>
                                <li><a href="/article/2754.htm"
                                       title="macvim的使用实战" target="_blank">macvim的使用实战</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a>
                                    <div>macvim用的是mac里面的vim, 只不过是一个GUI的APP, 相当于一个壳 
  
1. 下载macvim 
https://code.google.com/p/macvim/ 
  
2. 了解macvim 
:h               vim的使用帮助信息 
:h macvim  </div>
                                </li>
                                <li><a href="/article/2881.htm"
                                       title="java二分法查找" target="_blank">java二分法查找</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/java%E4%BA%8C%E5%88%86%E6%B3%95%E6%9F%A5%E6%89%BE/1.htm">java二分法查找</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%88%86%E6%B3%95/1.htm">二分法</a><a class="tag" taget="_blank" href="/search/java%E4%BA%8C%E5%88%86%E6%B3%95/1.htm">java二分法</a>
                                    <div>java二分法查找 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
蕃薯耀 2015年6月23日 11:40:03 星期二 
http:/</div>
                                </li>
                                <li><a href="/article/3008.htm"
                                       title="Spring Cache注解+Memcached" target="_blank">Spring Cache注解+Memcached</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/memcached/1.htm">memcached</a>
                                    <div>Spring3.1 Cache注解  
依赖jar包: 
<!-- simple-spring-memcached -->
		<dependency>
			<groupId>com.google.code.simple-spring-memcached</groupId>
			<artifactId>simple-s</div>
                                </li>
                                <li><a href="/article/3135.htm"
                                       title="apache commons io包快速入门" target="_blank">apache commons io包快速入门</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/apache+commons/1.htm">apache commons</a>
                                    <div>原文参考 
http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html 
 
  Apache Commons IO 包绝对是好东西,地址在http://commons.apache.org/proper/commons-io/,下面用例子分别介绍: 
  1)  工具类 
  2</div>
                                </li>
                                <li><a href="/article/3262.htm"
                                       title="如何学习编程" target="_blank">如何学习编程</a>
                                    <span class="text-muted">lampcy</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                    <div>首先,我想说一下学习思想.学编程其实跟网络游戏有着类似的效果.开始的时候,你会对那些代码,函数等产生很大的兴趣,尤其是刚接触编程的人,刚学习第一种语言的人.可是,当你一步步深入的时候,你会发现你没有了以前那种斗志.就好象你在玩韩国泡菜网游似的,玩到一定程度,每天就是练级练级,完全是一个想冲到高级别的意志力在支持着你.而学编程就更难了,学了两个月后,总是觉得你好象全都学会了,却又什么都做不了,又没有</div>
                                </li>
                                <li><a href="/article/3389.htm"
                                       title="架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy" target="_blank">架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy</a>
                                    <span class="text-muted">nannan408</span>
<a class="tag" taget="_blank" href="/search/Spring3/1.htm">Spring3</a>
                                    <div>1.前言。 
   如题。 
2.描述。 
   


@DependsOn用于强制初始化其他Bean。可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean。

@DependsOn({"steelAxe","abc"})
@Comp</div>
                                </li>
                                <li><a href="/article/3516.htm"
                                       title="Spring4+quartz2的配置和代码方式调度" target="_blank">Spring4+quartz2的配置和代码方式调度</a>
                                    <span class="text-muted">Everyday都不同</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE/1.htm">配置</a><a class="tag" taget="_blank" href="/search/spring4/1.htm">spring4</a><a class="tag" taget="_blank" href="/search/quartz2.x/1.htm">quartz2.x</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1/1.htm">定时任务</a>
                                    <div>前言:这些天简直被quartz虐哭。。因为quartz 2.x版本相比quartz1.x版本的API改动太多,所以,只好自己去查阅底层API…… 
  
quartz定时任务必须搞清楚几个概念: 
JobDetail——处理类 
Trigger——触发器,指定触发时间,必须要有JobDetail属性,即触发对象 
Scheduler——调度器,组织处理类和触发器,配置方式一般只需指定触发</div>
                                </li>
                                <li><a href="/article/3643.htm"
                                       title="Hibernate入门" target="_blank">Hibernate入门</a>
                                    <span class="text-muted">tntxia</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div>  
前言 
  
使用面向对象的语言和关系型的数据库,开发起来很繁琐,费时。由于现在流行的数据库都不面向对象。Hibernate 是一个Java的ORM(Object/Relational Mapping)解决方案。 
  
Hibernte不仅关心把Java对象对应到数据库的表中,而且提供了请求和检索的方法。简化了手工进行JDBC操作的流程。 
  
如</div>
                                </li>
                                <li><a href="/article/3770.htm"
                                       title="Math类" target="_blank">Math类</a>
                                    <span class="text-muted">xiaoxing598</span>
<a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a>
                                    <div>一、Java中的数字(Math)类是final类,不可继承。 
1、常数    PI:double圆周率 E:double自然对数    
2、截取(注意方法的返回类型)    double ceil(double d) 返回不小于d的最小整数 double floor(double d) 返回不大于d的整最大数   int round(float f) 返回四舍五入后的整数 long round</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>