Python爬虫: 抓取One网页上的每日一话和图

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

先说下需求:

最近打算搜集点源数据,丰富下生活。嗯,最近看到One这个APP蛮好的。每天想你推送一张图和一段话。很喜欢,简单不复杂。而我想要把所有的句子都保存下来,又不想要每个页面都去手动查看。因此,就有了Python。之前有点Python基础,不过没有深入。现在也没有深入,用哪学哪吧。

(一)
一台MAC电脑

(二)Python环境搭建(所有命令都是在terminal中输入的)

  • 安装homebrew:
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  • 安装pip:这里我在terminal中输入python -v,homebrew会自动帮你升级Python到2.7.11版本的。2.7.11版本里自带了pip工具。

  • 安装virtualenv:
    pip install virtualenv

  • 安装request和beautifulsoup4:
    pip install requests beautifulsoup4
    参考这里

(三)分析
目的:找出三个内容所在的网页标签的位置,然后将它们提取出来。
网址:http://wufazhuce.com/one/1293
谷歌浏览器,右键->显示网页源代码,然后就会弹出一堆HTML的东西了。这样的:


网页源文件

我想要的内容是这段话:“即使热恋者的情感是错觉、幻象或自恋行为,那又何妨,所谓人生就是一段不断追求情爱的路程。 by 森山大道”。它在图中画红线的地方。在标签里的中,之后会用到,先往下看。
图片的链接在哪里?显然不在中,往下找,然后就在中,发现2处和图片类似的链接。看图

 

图片链接地址

哪个链接是呢,点击去,发现后一个链接,也就是67行这个img标签的链接是。
然后,我还想知道哪一天的图和文字。嗯,在回到标签里,很明显有个</code>,里面的东西就是我们要的。这样:<br><code><title>VOL.1271 - 「ONE · 一个」
(四)python编码
想要抓取网页上的内容,又不想自己去解析HTML,只好求助万能的Google了。然后就找到了上面的链接。主要有两个工具:request加载网页,BeautifulSoup4解析HTML。

首先,抓取我们需要的哪三个内容:
进入python环境,然后敲入下面的代码:

import requestsimport bs4
response = requests.get('http://wufazhuce.com/one/1295')
soup = bs4.BeautifulSoup(response.text,"html.parser")

这样,就可以将网页信息存储到soup中了。你可以敲入print soup试试。

接下来,我们获得VOL.1271 - 「ONE · 一个」中的数字1271。怎么获得呢,beautifulsoup4教程,提供了很好的方法,可以通过tag查找得到title的内容,然后截取字符串。termianl中输入:

soup.title.string[3:7]

title是tag值,string是tag=title的字符串的值,也就是之间的值,因为只有一个</code>tag,所以不用做判断,直接获取即可。</p> <p style="text-align:justify;">接下来,获取一段话。</p> <p><br></p> <p> </p> <p style="text-align:justify;">这段话在<code><meta></code>中,而这里又有太多的<code><meta></code>了,怎么办。这里要用到select方法了,它可以查找所有的<code><meta></code>,并返回一个列表。还要用到get方法,get可以获得tag的属性,如tag: <code><meta attr='abc'></code> tag.get('attr')值等于abc。这里我们要获取的属性是name,通过name='description'来区分。</p> <pre><code class="language-python"><code>for meta in soup.select('meta'):    if meta.get('name') == 'description':        print meta.get('content')</code></code></pre> <p style="text-align:justify;">接下来,在两个img标签中,查找第2个img标签标定的链接。这里通过find_all方法,它可以查找所有的符合要求的标签。</p> <pre><code class="language-python"><code>soup.find_all('img')[1]['src']</code></code></pre> <p style="text-align:justify;">这样,我们就把所需要的信息找出来了。</p> <p><br></p> <p>终端示例</p> <p style="text-align:justify;">等等,之后我们还需要并发和保存文件。在此之前,先来看点别的。map函数有两个参数,一个是函数,一个是序列。将序列的每个值,作为参数传递给函数,返回一个列表。参考这里<br>示例:</p> <pre><code class="language-python"><code>def echoInfo(num):     return num data = map(echoInfo, range(0,10))print data</code></code></pre> <p style="text-align:justify;">结果: <code>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</code><br>然后并发, python可以跨平台使用,自身提供了多进程支持模块:multiprocessing。而pool可以用来创建大量的子进程。<br>保存数据到文件。这里我们是吧数据解析后存储到字典中,然后序列化为JSON模型,最后保存到文件的。<br>即:字典->JSON模型->存储到文件。<br>字典->JSON模型,使用的是JSON模块的json.dumps方法,该方法有一个参数,参数为字典,返回值是JSON字符串。<br>JSON模型->文件,使用的是json.load方法,可以将JSON存储到文件中。</p> <p style="text-align:justify;">全部的代码示例如下:</p> <pre><code class="language-python"><code>import argparseimport refrom multiprocessing import Poolimport requestsimport bs4import timeimport jsonimport io root_url = 'http://wufazhuce.com'def get_url(num):     return root_url + '/one/' + str(num)def get_urls(num):     urls = map(get_url, range(100,100+num))    return urlsdef get_data(url):   dataList = {}   response = requests.get(url)  if response.status_code != 200:      return {'noValue': 'noValue'}   soup = bs4.BeautifulSoup(response.text,"html.parser")   dataList["index"] = soup.title.string[4:7]  for meta in soup.select('meta'):    if meta.get('name') == 'description':       dataList["content"] = meta.get('content')   dataList["imgUrl"] = soup.find_all('img')[1]['src']  return dataListif __name__=='__main__':   pool = Pool(4)   dataList = []   urls = get_urls(10)   start = time.time()   dataList = pool.map(get_data, urls)   end = time.time()  print 'use: %.2f s' % (end - start)   jsonData = json.dumps({'data':dataList})  with open('data.txt', 'w') as outfile:     json.dump(jsonData, outfile)</code></code></pre> <div class="ad-wrap"> <div id="blog-title-ad"> <ins class="adsbygoogle"></ins> </div> </div> </div> <p>转载于:https://my.oschina.net/aichirou/blog/670399</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1292851641053159424"></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">你可能感兴趣的:(Python爬虫: 抓取One网页上的每日一话和图)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1883335504200527872.htm" title="个人KPI与GTD之间为什么怎么像" target="_blank">个人KPI与GTD之间为什么怎么像</a> <span class="text-muted">小Mie不吃饭</span> <a class="tag" taget="_blank" href="/search/KPI/1.htm">KPI</a><a class="tag" taget="_blank" href="/search/%E6%8C%87%E6%A0%87/1.htm">指标</a><a class="tag" taget="_blank" href="/search/GTD/1.htm">GTD</a><a class="tag" taget="_blank" href="/search/gtd/1.htm">gtd</a><a class="tag" taget="_blank" href="/search/kpi/1.htm">kpi</a> <div>目录KPI的定义GTD的定义KPI与GTD的关系目标一致性相互补充应用场景实际应用示例KPI(关键绩效指标)和GTD(GettingThingsDone,完成每一件事)是两种不同的管理工具,它们在个人和组织管理中有着各自的作用和应用场景,但也存在一定的联系。KPI的定义KPI是关键绩效指标,通过对组织内部流程的关键参数进行设置、取样、计算、分析,衡量流程绩效的一种目标式量化管理指标。KPI的主要作</div> </li> <li><a href="/article/1883335505014222848.htm" title="npm link 作用" target="_blank">npm link 作用</a> <span class="text-muted">yqcoder</span> <a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>一、`npmlink`的定义`npmlink`是npm提供的一个命令,它的主要作用是在本地开发npm包时,将本地开发的包链接到全局的`node_modules`目录中,并且在另一个项目中也可以使用这个本地开发的包,就好像它是一个通过`npminstall`安装的正常的第三方包一样。二、`npmlink`的工作原理1.全局链接当你在一个包的目录下运行`npmlink`时,npm会创建一个符号链接,将</div> </li> <li><a href="/article/1883335377889062912.htm" title="反向代理模块" target="_blank">反向代理模块</a> <span class="text-muted">xianwu543</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</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/mysql/1.htm">mysql</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/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>1概念1.1反向代理概念反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。对于客户端来说,反向代理就相当于目标服务器,只需要将反向代理当作目标服务器一样发送请求就可以了,并且客户端不需要进行任何设置。1.2特点反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见。原文链接:h</div> </li> <li><a href="/article/1883335125794615296.htm" title="云计算如何与物联网(IoT)结合?" target="_blank">云计算如何与物联网(IoT)结合?</a> <span class="text-muted">云上的阿七</span> <a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E7%89%A9%E8%81%94%E7%BD%91/1.htm">物联网</a> <div>今天我们来聊一个既酷炫又实用的话题:云计算如何给物联网插上腾飞的翅膀。智能时代的技术密码想象一下,你家的冰箱会自动帮你订购即将用完的牛奶,工厂的机器能预测何时需要维修,城市的路灯会根据实时交通流量调整亮度。这些看似科幻的场景,正是云计算与物联网完美融合的魔法。架构师视角下的技术融合我深知这不仅仅是简单的技术叠加,而是一场深度革命。云计算为物联网提供了超级加速器:弹性计算:像变形金刚一样随时调整计算</div> </li> <li><a href="/article/1883334999420235776.htm" title="2021-10-07" target="_blank">2021-10-07</a> <span class="text-muted">少年近视</span> <a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a> <div>Regionprops:用途是getthepropertiesofregion,即用来度量图像区域属性的函数。语法:STATS=regionprops(L,properties)描述:测量标注矩阵L中每一个标注区域的一系列属性。L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推。返回值STATS是一个长度为max(L(:))的结构数组</div> </li> <li><a href="/article/1883334873180073984.htm" title="【window批处理文件快速入门学习--这份文档就够了】" target="_blank">【window批处理文件快速入门学习--这份文档就够了】</a> <span class="text-muted">少年近视</span> <a class="tag" taget="_blank" href="/search/%E6%89%B9%E5%A4%84%E7%90%86/1.htm">批处理</a><a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/batch/1.htm">batch</a> <div>一、简介1.1什么是批处理文件?批处理文件(BatchFile)是一种包含一系列DOS命令的文本文件,通常用于自动化重复性任务。文件的扩展名为.bat或.cmd,当在命令提示符下运行时,操作系统会按顺序执行文件中的命令。批处理文件的创建和使用为用户提供了高效的命令行操作方式。示例:创建一个简单的批处理文件,文件名为example.bat,内容如下:@echooffecho这是一个简单的批处理文件。</div> </li> <li><a href="/article/1883334746872803328.htm" title="【Python】2.1字面量" target="_blank">【Python】2.1字面量</a> <span class="text-muted">我是初九</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E7%94%9F%E8%8B%A6%E7%9F%AD/1.htm">人生苦短</a><a class="tag" taget="_blank" href="/search/%E6%88%91%E7%88%B1Python/1.htm">我爱Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">字符串</a> <div>字面量(literal)在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数、浮点数以及字符串;而有很多也对布尔类型和字符类型的值也支持字面量表示;还有一些甚至对枚举类型的元素以及像数组、记录和对象等复合类型的值也支持字面量表示法。简单地说,字面量是用于表示固定值的符号(token)字面量是某</div> </li> <li><a href="/article/1883334117085474816.htm" title="设计模式--策略模式" target="_blank">设计模式--策略模式</a> <span class="text-muted">shenzy呀</span> <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/%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F/1.htm">策略模式</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>文章目录策略(Strategy)模式策略模式的收银软件策略模式的特点使用场景优缺点策略模式和工厂模式的结合策略(Strategy)模式本质:分离算法,选择实现。策略模式:针对一组算法,将每一个算法封装到具有共同接口的独立的类中,使得它们可以互换。使用策略模式可以把行为和环境分割开来。环境类Context负责查询要做什么,各种算法则在具体策略类(ConcreteStrategy)中提供。当出现新的促</div> </li> <li><a href="/article/1883333990753038336.htm" title="RabbitMQ 架构分析" target="_blank">RabbitMQ 架构分析</a> <span class="text-muted">DREAM LINER SU</span> <a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/ruby/1.htm">ruby</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>文章目录前言一、RabbitMQ架构分析1、Broker2、Vhost3、Producer4、Messages5、Connections6、Channel7、Exchange7、Queue8、Consumer二、消息路由机制1、DirectExchange2、TopicExchange3、FanoutExchange4、HeadersExchange5、notice5.1、备用交换机(Altern</div> </li> <li><a href="/article/1883333989779959808.htm" title="linux下使用vscode和cmake高效管理c++项目简明教程" target="_blank">linux下使用vscode和cmake高效管理c++项目简明教程</a> <span class="text-muted">zeeq_</span> <a class="tag" taget="_blank" href="/search/Ubuntu/1.htm">Ubuntu</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a> <div>  安装vscode及c++环境配置可以参见:https://blog.csdn.net/fangshuo_light/article/details/123635576  首先,创建工程目录,并在vscode中打开该文件夹,在里面创建如下文件夹:include:用于存放.h文件src:用于存放.cpp文件build:cmake生成文件的存放路径CMakeLists.txt:cmake配置文件  </div> </li> <li><a href="/article/1883333737681317888.htm" title="typing库" target="_blank">typing库</a> <span class="text-muted">离开那天</span> <a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a> <div>typing库是Python标准库的一部分,用于支持静态类型检查。通过使用typing库,你可以为函数、变量和类添加类型注解,从而提高代码的可读性和可维护性,并帮助工具如IDE和类型检查器(例如mypy)进行静态类型检查。以下是typing库的一些常见用法和示例:1.基本类型注解你可以为函数参数和返回值添加类型注解:defgreet(name:str)->str:returnf"Hello,{na</div> </li> <li><a href="/article/1883333485406515200.htm" title="java线程间如何通信" target="_blank">java线程间如何通信</a> <span class="text-muted">一只爪子</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Java线程之间可以通过以下方式进行通信:使用wait()和notify()方法,这需要使用同步代码块或同步方法。在同步代码块或同步方法中,线程可以调用wait()方法阻塞,并在其他线程调用notify()方法后恢复执行。使用CountDownLatch,它是一个同步辅助类,可以让一个线程等待其他线程的完成。使用CyclicBarrier,它也是一个同步辅助类,可以让多个线程在某个点上等待,直到所</div> </li> <li><a href="/article/1883333107499724800.htm" title="Node CLI 之 Commander.js (1)" target="_blank">Node CLI 之 Commander.js (1)</a> <span class="text-muted">史一试</span> <a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%89%8B%E6%9E%B6/1.htm">脚手架</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</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/ecmascript/1.htm">ecmascript</a> <div>官网地址:https://github.com/tj/commander.js/blob/f1ae2db8e2da01d6efcbfd59cbf82202f864b0c1/Readme_zh-CN.mdCommander.js是node.js命令行界面的完整解决方案开始新建一个node工程执行npminstallcommanderpackage.json中新增代码添加#!/usr/bin/envn</div> </li> <li><a href="/article/1883332980462645248.htm" title="【由浅入深认识Maven】第2部分 maven依赖管理与仓库机制" target="_blank">【由浅入深认识Maven】第2部分 maven依赖管理与仓库机制</a> <span class="text-muted">Suwg209</span> <a class="tag" taget="_blank" href="/search/%E7%94%B1%E6%B5%85%E5%85%A5%E6%B7%B1%E8%AE%A4%E8%AF%86maven/1.htm">由浅入深认识maven</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>文章目录第二篇:Maven依赖管理与仓库机制一、前言二、依赖管理基础1.依赖声明2.依赖范围(Scope)3.依赖冲突与排除三、Maven的仓库机制1.本地仓库2.中央仓库3.远程仓库四、版本管理策略1.固定版本2.版本范围五、总结第二篇:Maven依赖管理与仓库机制一、前言后端研发同学经常面临项目中需要依赖大量第三方库的情况。这些依赖库通常是我们工作中的基础工具,例如Spring、Log4j、J</div> </li> <li><a href="/article/1883332981049847808.htm" title="python 类型标注-typing --- 类型标注支持 — Python 3.7.9 文档" target="_blank">python 类型标注-typing --- 类型标注支持 — Python 3.7.9 文档</a> <span class="text-muted">weixin_39892481</span> <div>类,函数和修饰器.¶这个模块定义了如下的类,模块和修饰器.classtyping.TypeVar¶类型变量用法:T=TypeVar("T")#CanbeanythingA=TypeVar("A",str,bytes)#MustbestrorbytesTypevariablesexistprimarilyforthebenefitofstatictypecheckers.Theyserveasthe</div> </li> <li><a href="/article/1883332854272815104.htm" title="《Effective Java》学习笔记——第7部分并发" target="_blank">《Effective Java》学习笔记——第7部分并发</a> <span class="text-muted">Suwg209</span> <a class="tag" taget="_blank" href="/search/Effective/1.htm">Effective</a><a class="tag" taget="_blank" href="/search/Java%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%E7%AC%94%E8%AE%B0/1.htm">Java最佳实践笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>文章目录一、前言二、并发最佳实践1.优先使用现有的并发库2.避免共享可变数据3.最小化锁的持有时间4.使用合适的同步策略5.使用volatile变量来避免缓存问题6.避免死锁7.使用ExecutorService管理线程8.优先使用无锁并发工具三、小结一、前言《EffectiveJava》第7部分“并发”介绍了如何编写高效、安全的多线程程序。随着多核处理器的普及,Java的并发编程变得更加重要。本</div> </li> <li><a href="/article/1883332727990710272.htm" title="《Effective Java》学习笔记--第3部分 方法设计和实现最佳实践" target="_blank">《Effective Java》学习笔记--第3部分 方法设计和实现最佳实践</a> <span class="text-muted">Suwg209</span> <a class="tag" taget="_blank" href="/search/Effective/1.htm">Effective</a><a class="tag" taget="_blank" href="/search/Java%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%E7%AC%94%E8%AE%B0/1.htm">Java最佳实践笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>文章目录第3部分方法设计和实现一、前言二、方法设计和实现最佳实践1.方法的参数要尽量少2.避免使用过多的返回值3.避免在方法中返回null4.方法要尽量做到单一职责5.使用合适的访问修饰符6.避免方法内部的过多的条件分支7.使用适当的异常处理8.考虑方法的线程安全性三、小结第3部分方法设计和实现一、前言《EffectiveJava》共有多个章节,每个章节提供了若干条建议或最佳实践,整理了对应章节关</div> </li> <li><a href="/article/1883332601574387712.htm" title="《手写Mybatis渐进式源码实践》实践笔记 (第三章 映射器的注册和使用)" target="_blank">《手写Mybatis渐进式源码实践》实践笔记 (第三章 映射器的注册和使用)</a> <span class="text-muted">Suwg209</span> <a class="tag" taget="_blank" href="/search/%E6%89%8B%E5%86%99mybatis/1.htm">手写mybatis</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><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/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>文章目录第3章映射器的注册和使用背景特点结构代码示例(Java)适用场景优点缺点目标设计实现工程代码类图实现步骤1.映射器注册机2.SqlSession标准定义和实现3.SqlSessionFactory工厂定义和实现测试事先准备测试用例测试结果总结第3章映射器的注册和使用背景工厂模式(FactoryMethodPattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但允许子类决定实</div> </li> <li><a href="/article/1883332223063617536.htm" title="Java多线程之线程通信" target="_blank">Java多线程之线程通信</a> <span class="text-muted">心情阿少</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>线程通信通过synchronized关键字,可保证线程在执行的过程中不会被其他线程打断,但无法保证线程的执行次序。比如上述案例中,我们可以保证t1线程输出"好好学习"时,不会被t2线程打断,但无法保证t1、t2两个线程执行的次序。如果想要控制线程输出次序,则需要学习线程通信技术。1)概念理解线程间通信:多个线程并发执行时,在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,并</div> </li> <li><a href="/article/1883332223499825152.htm" title="使用commander创建自定义命令行工具" target="_blank">使用commander创建自定义命令行工具</a> <span class="text-muted">van_95</span> <div>准备工作1.安装node.js,在官网下载即可,利用node.js的打包工具npm开始第一步.首先创建一个demo文件夹(名称自定义)第二步.在demo文件夹中创建一个bin文件夹,在bin文件夹下创建一个demo.js,然后在js中写下如下代码#!/usr/bin/envnodeconsole.log('demoisrun')第三步.使用cmd命令行,进入demo所在的文件夹下,然后输入命令np</div> </li> <li><a href="/article/1883330963652538368.htm" title="Langchain[6]-LangGraph:异步和流、图可视化、多智能体协作、LCEL代码生成" target="_blank">Langchain[6]-LangGraph:异步和流、图可视化、多智能体协作、LCEL代码生成</a> <span class="text-muted">汀、人工智能</span> <a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/LangGraph/1.htm">LangGraph</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C/1.htm">多智能体协作</a><a class="tag" taget="_blank" href="/search/AI%E6%99%BA%E8%83%BD%E4%BD%93/1.htm">AI智能体</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">AI大模型</a><a class="tag" taget="_blank" href="/search/Agent%E6%A1%86%E6%9E%B6/1.htm">Agent框架</a> <div>Langchain[6]-LangGraph:异步和流、图可视化、多智能体协作、LCEL代码生成1.异步和流因为任何大模型在推理的时候,都会有一定的时间延迟,这是由大模型的底层架构决定的,所以在很多应用,尤其是对话应用中,使用异步以及流式输出,是大幅提升用户体验的较好方法。在langGraph中可以很方便的实现异步和流,简单例子为例:异步调用方法:inputs={"messages"</div> </li> <li><a href="/article/1883330080848015360.htm" title="原型模式详解与实践" target="_blank">原型模式详解与实践</a> <span class="text-muted">咖啡の猫</span> <a class="tag" taget="_blank" href="/search/%E5%8E%9F%E5%9E%8B%E6%A8%A1%E5%BC%8F/1.htm">原型模式</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>在软件开发的奇妙世界里,我们常常面临重复创建相似对象的任务。如果每次创建都要从头开始设置各种属性和状态,不仅繁琐,还可能降低效率。原型模式就像一位神奇的魔法师,为我们提供了一种通过复制现有对象来创建新对象的优雅方式。它不仅能提高对象创建的效率,还能简化代码结构,让我们在开发过程中更加得心应手。本文将深入探讨原型模式的奥秘,带您领略其在实际应用中的魅力。一、原型模式的定义与概念原型模式是一种创建型设</div> </li> <li><a href="/article/1883330081493938176.htm" title="解释器模式" target="_blank">解释器模式</a> <span class="text-muted">咖啡の猫</span> <a class="tag" taget="_blank" href="/search/%E8%A7%A3%E9%87%8A%E5%99%A8%E6%A8%A1%E5%BC%8F/1.htm">解释器模式</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>在软件开发的诸多场景中,我们有时需要处理特定领域的语言或表达式。例如,在数据库查询中,我们使用SQL语句来查询数据;在数学计算软件里,需要解析和计算各种数学表达式。解释器模式(InterpreterPattern)应运而生,它提供了一种将语言中的语句表示为对象,并为这些语句定义解释方法的方式,从而使我们能够在程序中解释和执行特定领域的语言。解释器模式概述解释器模式是一种行为型设计模式,它用于定义一</div> </li> <li><a href="/article/1883330082139860992.htm" title="状态模式" target="_blank">状态模式</a> <span class="text-muted">咖啡の猫</span> <a class="tag" taget="_blank" href="/search/%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F/1.htm">状态模式</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>在软件开发过程中,我们经常会遇到这样的情况:一个对象的行为会随着其内部状态的改变而发生变化。例如,一个手机在不同状态下(开机、关机、静音等)对相同的操作(如来电)会有不同的反应。传统的解决方案可能会使用大量的条件判断语句(如if-else或switch-case)来处理不同状态下的行为,但这种方式会使代码变得臃肿、难以维护和扩展。状态模式(StatePattern)应运而生,它提供了一种优雅的方式</div> </li> <li><a href="/article/1883330079841382400.htm" title="设计模式七大原则" target="_blank">设计模式七大原则</a> <span class="text-muted">咖啡の猫</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>设计模式背后的七大原则是软件开发过程中必须遵循的黄金法则,为我们构建高质量的软件架构奠定了坚实基础。本文将深入剖析这七大原则,带您领略其深刻内涵与实际应用。一、单一职责原则(SingleResponsibilityPrinciple,SRP)2.1原则定义一个类应该仅有一个引起它变化的原因,即一个类应该只负责一项职责。2.2示例分析以一个简单的用户管理系统为例,假设我们有一个UserService</div> </li> <li><a href="/article/1883329701808762880.htm" title="java干货 线程间通信" target="_blank">java干货 线程间通信</a> <span class="text-muted">小男孩编程</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><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a> <div>文章目录一、线程间通信1.1为什么要处理线程间通信?1.2什么是等待唤醒机制?二、等待唤醒机制使用2.1等待唤醒机制用到的方法2.1.1wait2.1.2notify2.2线程通信代码实践2.2.1重要说明2.2.2代码一、线程间通信1.1为什么要处理线程间通信?在默认情况下,cpu是默认切换线程来执行的,当我们需要多个线程共同来完成一个任务,希望他们按照一定的规律执行,那么就需要他们进行通信协调</div> </li> <li><a href="/article/1883329575472132096.htm" title="fatal: unable to access ‘https://github" target="_blank">fatal: unable to access ‘https://github</a> <span class="text-muted">江_小_白</span> <a class="tag" taget="_blank" href="/search/%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/1.htm">报错解决方案</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a> <div>fatal:unabletoaccess‘https://github.com/protocolbuffers/protobuf.git/’:Failedtoconnecttogithub.comport443:Connectiontimedout下载项目的时候出现了这个问题,本以为是网络或者什么的问题,没想到是sudo,sudosudogitclone-bv3.6.1https://github</div> </li> <li><a href="/article/1883329448321806336.htm" title="Java中的注解" target="_blank">Java中的注解</a> <span class="text-muted">RB_VER</span> <a class="tag" taget="_blank" href="/search/Java%E5%9F%BA%E7%A1%80/1.htm">Java基础</a><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%E8%AF%AD%E8%A8%80/1.htm">编程语言</a> <div>为什么要引入注解?使用【注解】之前(甚至在使用之后),【XML】被广泛的应用于描述元数据,得到各大框架的青睐,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,【XML】的内容也越来越复杂,一些应用开发人员和架构师发现维护成本变高。他们希望使用一些和代码紧耦合的东西,于是就有人提出来一种标记式高耦合的配置方式【注解】。方法上可以进行注解,类上也可以注解,字段属性上也可以注解,反正</div> </li> <li><a href="/article/1883329449110335488.htm" title="java常见单词汇总3(非常使用哦)" target="_blank">java常见单词汇总3(非常使用哦)</a> <span class="text-muted">糟糕透了的都精彩极了</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java%E5%B8%B8%E7%94%A8%E8%8B%B1%E6%96%87%E5%8D%95%E8%AF%8D/1.htm">java常用英文单词</a> <div>JSP中常用英文URL:UniversalResourceLocation:统一资源定位符IE:InternetExplorer因特网浏览器JSP:javaserverpage.java服务器页面Model:模型View:视图C:controller:控制器Tomcat:一种jsp的web服务器WebModule:web模块Servlet:小服务程序Request:请求Response:响应Ini</div> </li> <li><a href="/article/1883329196185415680.htm" title="青少年编程与数学 02-008 Pyhon语言编程基础 03课题、环境准备" target="_blank">青少年编程与数学 02-008 Pyhon语言编程基础 03课题、环境准备</a> <span class="text-muted">明月看潮生</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B8%8E%E6%95%B0%E5%AD%A6/1.htm">编程与数学</a><a class="tag" taget="_blank" href="/search/%E7%AC%AC02%E9%98%B6%E6%AE%B5/1.htm">第02阶段</a><a class="tag" taget="_blank" href="/search/%E9%9D%92%E5%B0%91%E5%B9%B4%E7%BC%96%E7%A8%8B/1.htm">青少年编程</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B8%8E%E6%95%B0%E5%AD%A6/1.htm">编程与数学</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a> <div>青少年编程与数学02-008Pyhon语言编程基础03课题、环境准备一、开发环境二、PyCharm安装PyCharm配置PyCharm三、VSCode安装VSCode配置VSCode四、Python(解释器)Windows系统:macOS系统:Linux系统:五、PythonShell特点:如何打开PythonShell:使用示例:六、PythonIDLE特点如何使用IDLE局限性七、Jupyte</div> </li> <li><a href="/article/44.htm" title="Enum 枚举" target="_blank">Enum 枚举</a> <span class="text-muted">120153216</span> <a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E6%9E%9A%E4%B8%BE/1.htm">枚举</a> <div>原文地址:http://www.cnblogs.com/Kavlez/p/4268601.html Enumeration 于Java 1.5增加的enum type...enum type是由一组固定的常量组成的类型,比如四个季节、扑克花色。在出现enum type之前,通常用一组int常量表示枚举类型。比如这样: public static final int APPLE_FUJI = 0</div> </li> <li><a href="/article/171.htm" title="Java8简明教程" target="_blank">Java8简明教程</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk1.8/1.htm">jdk1.8</a> <div>        Java 8已于2014年3月18日正式发布了,新版本带来了诸多改进,包括Lambda表达式、Streams、日期时间API等等。本文就带你领略Java 8的全新特性。  一.允许在接口中有默认方法实现         Java 8 允许我们使用default关键字,为接口声明添</div> </li> <li><a href="/article/298.htm" title="Oracle表维护 快速备份删除数据" target="_blank">Oracle表维护 快速备份删除数据</a> <span class="text-muted">cuisuqiang</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E7%B4%A2%E5%BC%95/1.htm">索引</a><a class="tag" taget="_blank" href="/search/%E5%BF%AB%E9%80%9F/1.htm">快速</a><a class="tag" taget="_blank" href="/search/%E5%A4%87%E4%BB%BD/1.htm">备份</a><a class="tag" taget="_blank" href="/search/%E5%88%A0%E9%99%A4/1.htm">删除</a> <div>我知道oracle表分区,不过那是数据库设计阶段的事情,目前是远水解不了近渴。 当前的数据库表,要求保留一个月数据,且表存在大量录入更新,不存在程序删除。 为了解决频繁查询和更新的瓶颈,我在oracle内根据需要创建了索引。但是随着数据量的增加,一个半月数据就要超千万,此时就算有索引,对高并发的查询和更新来说,让然有所拖累。 为了解决这个问题,我一般一个月会进行一次数据库维护,主要工作就是备</div> </li> <li><a href="/article/425.htm" title="java多态内存分析" target="_blank">java多态内存分析</a> <span class="text-muted">麦田的设计者</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98%E5%88%86%E6%9E%90/1.htm">内存分析</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E6%80%81%E5%8E%9F%E7%90%86/1.htm">多态原理</a><a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3%E5%92%8C%E6%8A%BD%E8%B1%A1%E7%B1%BB/1.htm">接口和抽象类</a> <div>      “  时针如果可以回头,熟悉那张脸,重温嬉戏这乐园,墙壁的松脱涂鸦已经褪色才明白存在的价值归于记忆。街角小店尚存在吗?这大时代会不会牵挂,过去现在花开怎么会等待。       但有种意外不管痛不痛都有伤害,光阴远远离开,那笑声徘徊与脑海。但这一秒可笑不再可爱,当天心</div> </li> <li><a href="/article/552.htm" title="Xshell实现Windows上传文件到Linux主机" target="_blank">Xshell实现Windows上传文件到Linux主机</a> <span class="text-muted">被触发</span> <a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a> <div>经常有这样的需求,我们在Windows下载的软件包,如何上传到远程Linux主机上?还有如何从Linux主机下载软件包到Windows下;之前我的做法现在看来好笨好繁琐,不过也达到了目的,笨人有本方法嘛; 我是怎么操作的: 1、打开一台本地Linux虚拟机,使用mount 挂载Windows的共享文件夹到Linux上,然后拷贝数据到Linux虚拟机里面;(经常第一步都不顺利,无法挂载Windo</div> </li> <li><a href="/article/679.htm" title="类的加载ClassLoader" target="_blank">类的加载ClassLoader</a> <span class="text-muted">肆无忌惮_</span> <a class="tag" taget="_blank" href="/search/ClassLoader/1.htm">ClassLoader</a> <div>类加载器ClassLoader是用来将java的类加载到虚拟机中,类加载器负责读取class字节文件到内存中,并将它转为Class的对象(类对象),通过此实例的 newInstance()方法就可以创建出该类的一个对象。   其中重要的方法为findClass(String name)。   如何写一个自己的类加载器呢? 首先写一个便于测试的类Student</div> </li> <li><a href="/article/806.htm" title="html5写的玫瑰花" target="_blank">html5写的玫瑰花</a> <span class="text-muted">知了ing</span> <a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div><html> <head> <title>I Love You!</title> <meta charset="utf-8" /> </head> <body> <canvas id="c"></canvas> </div> </li> <li><a href="/article/933.htm" title="google的ConcurrentLinkedHashmap源代码解析" target="_blank">google的ConcurrentLinkedHashmap源代码解析</a> <span class="text-muted">矮蛋蛋</span> <a class="tag" taget="_blank" href="/search/LRU/1.htm">LRU</a> <div>原文地址: http://janeky.iteye.com/blog/1534352 简述 ConcurrentLinkedHashMap 是google团队提供的一个容器。它有什么用呢?其实它本身是对 ConcurrentHashMap的封装,可以用来实现一个基于LRU策略的缓存。详细介绍可以参见 http://code.google.com/p/concurrentlinke</div> </li> <li><a href="/article/1060.htm" title="webservice获取访问服务的ip地址" target="_blank">webservice获取访问服务的ip地址</a> <span class="text-muted">alleni123</span> <a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a> <div>1. 首先注入javax.xml.ws.WebServiceContext, @Resource private WebServiceContext context; 2. 在方法中获取交换请求的对象。 javax.xml.ws.handler.MessageContext mc=context.getMessageContext(); com.sun.net.http</div> </li> <li><a href="/article/1187.htm" title="菜鸟的java基础提升之道——————>是否值得拥有" target="_blank">菜鸟的java基础提升之道——————>是否值得拥有</a> <span class="text-muted">百合不是茶</span> <div>1,c++,java是面向对象编程的语言,将万事万物都看成是对象;java做一件事情关注的是人物,java是c++继承过来的,java没有直接更改地址的权限但是可以通过引用来传值操作地址,java也没有c++中繁琐的操作,java以其优越的可移植型,平台的安全型,高效性赢得了广泛的认同,全世界越来越多的人去学习java,我也是其中的一员      java组成:</div> </li> <li><a href="/article/1314.htm" title="通过修改Linux服务自动启动指定应用程序" target="_blank">通过修改Linux服务自动启动指定应用程序</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>Linux中修改系统服务的命令是chkconfig (check config),命令的详细解释如下: chkconfig 功能说明:检查,设置系统的各种服务。 语  法:chkconfig [ -- add][ -- del][ -- list][系统服务] 或 chkconfig [ -- level  <</SPAN></div> </li> <li><a href="/article/1441.htm" title="spring拦截器的一个简单实例" target="_blank">spring拦截器的一个简单实例</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E6%8B%A6%E6%88%AA%E5%99%A8/1.htm">拦截器</a><a class="tag" taget="_blank" href="/search/Interceptor/1.htm">Interceptor</a> <div>Purview接口 package aop; public interface Purview { void checkLogin(); } Purview接口的实现类PurviesImpl.java package aop; public class PurviewImpl implements Purview { public void check</div> </li> <li><a href="/article/1568.htm" title="[Velocity二]自定义Velocity指令" target="_blank">[Velocity二]自定义Velocity指令</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/velocity/1.htm">velocity</a> <div>什么是Velocity指令 在Velocity中,#set,#if, #foreach, #elseif, #parse等,以#开头的称之为指令,Velocity内置的这些指令可以用来做赋值,条件判断,循环控制等脚本语言必备的逻辑控制等语句,Velocity的指令是可扩展的,即用户可以根据实际的需要自定义Velocity指令   自定义指令(Directive)的一般步骤 &nbs</div> </li> <li><a href="/article/1695.htm" title="【Hive十】Programming Hive学习笔记" target="_blank">【Hive十】Programming Hive学习笔记</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/programming/1.htm">programming</a> <div> 第二章 Getting Started 1.Hive最大的局限性是什么?一是不支持行级别的增删改(insert, delete, update)二是查询性能非常差(基于Hadoop MapReduce),不适合延迟小的交互式任务三是不支持事务2. Hive MetaStore是干什么的?Hive persists table schemas and other system metadata.</div> </li> <li><a href="/article/1822.htm" title="nginx有选择性进行限制" target="_blank">nginx有选择性进行限制</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+%E5%8A%A8%E9%9D%99%E3%80%80%E9%99%90%E5%88%B6/1.htm">nginx 动静 限制</a> <div>http { limit_conn_zone $binary_remote_addr zone=addr:10m; limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;... server {... location ~.*\.(gif|png|css|js|icon)$ { </div> </li> <li><a href="/article/1949.htm" title="java-4.-在二元树中找出和为某一值的所有路径 ." target="_blank">java-4.-在二元树中找出和为某一值的所有路径 .</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> /* * 0.use a TwoWayLinkedList to store the path.when the node can't be path,you should/can delete it. * 1.curSum==exceptedSum:if the lastNode is TreeNode,printPath();delete the node otherwise </div> </li> <li><a href="/article/2076.htm" title="Netty学习笔记" target="_blank">Netty学习笔记</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a> <div>本文是阅读以下两篇文章时: http://seeallhearall.blogspot.com/2012/05/netty-tutorial-part-1-introduction-to.html http://seeallhearall.blogspot.com/2012/06/netty-tutorial-part-15-on-channel.html 我的一些笔记 ===</div> </li> <li><a href="/article/2203.htm" title="js获取项目路径" target="_blank">js获取项目路径</a> <span class="text-muted">cngolon</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a> <div>//js获取项目根路径,如: http://localhost:8083/uimcardprj function getRootPath(){     //获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp     var curWwwPath=window.document.locati</div> </li> <li><a href="/article/2330.htm" title="oracle 的性能优化" target="_blank">oracle 的性能优化</a> <span class="text-muted">cuishikuan</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a> <div>   在网上搜索了一些Oracle性能优化的文章,为了更加深层次的巩固[边写边记],也为了可以随时查看,所以发表这篇文章。     1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。(这点本人曾经做过实例验证过,的确如此哦!</div> </li> <li><a href="/article/2457.htm" title="Shell变量和数组使用详解" target="_blank">Shell变量和数组使用详解</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/%E5%8F%98%E9%87%8F/1.htm">变量</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a> <div>Shell 变量 定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="w3cschool.cc" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 首个字符必须为字母(a-z,A-Z)。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用ba</div> </li> <li><a href="/article/2584.htm" title="编程中的一些概念,KISS、DRY、MVC、OOP、REST" target="_blank">编程中的一些概念,KISS、DRY、MVC、OOP、REST</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a> <div>KISS、DRY、MVC、OOP、REST (1)KISS是指Keep It Simple,Stupid(摘自wikipedia),指设计时要坚持简约原则,避免不必要的复杂化。 (2)DRY是指Don't Repeat Yourself(摘自wikipedia),特指在程序设计以及计算中避免重复代码,因为这样会降低灵活性、简洁性,并且可能导致代码之间的矛盾。 (3)OOP 即Object-Orie</div> </li> <li><a href="/article/2711.htm" title="[Android]设置Activity为全屏显示的两种方法" target="_blank">[Android]设置Activity为全屏显示的两种方法</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Activity/1.htm">Activity</a> <div>1. 方法1:AndroidManifest.xml 里,Activity的 android:theme  指定为" @android:style/Theme.NoTitleBar.Fullscreen" 示例:   <application      </div> </li> <li><a href="/article/2838.htm" title="solrcloud 部署方式比较" target="_blank">solrcloud 部署方式比较</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/solrCloud/1.htm">solrCloud</a> <div>solrcloud 的部署其实有两种方式可选,那么我们在实践开发中应该怎样选择呢? 第一种:当启动solr服务器时,内嵌的启动一个Zookeeper服务器,然后将这些内嵌的Zookeeper服务器组成一个集群。  第二种:将Zookeeper服务器独立的配置一个集群,然后将solr交给Zookeeper进行管理   谈谈第一种:每启动一个solr服务器就内嵌的启动一个Zoo</div> </li> <li><a href="/article/2965.htm" title="Java synchronized关键字详解" target="_blank">Java synchronized关键字详解</a> <span class="text-muted">gqdy365</span> <a class="tag" taget="_blank" href="/search/synchronized/1.htm">synchronized</a> <div>转载自:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html 多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题。 同步机制可以使用synchronized关键字实现。 当synchronized关键字修饰一个方法的时候,该方法叫做同步方法。 当s</div> </li> <li><a href="/article/3092.htm" title="js实现登录时记住用户名" target="_blank">js实现登录时记住用户名</a> <span class="text-muted">hw1287789687</span> <a class="tag" taget="_blank" href="/search/%E8%AE%B0%E4%BD%8F%E6%88%91/1.htm">记住我</a><a class="tag" taget="_blank" href="/search/%E8%AE%B0%E4%BD%8F%E5%AF%86%E7%A0%81/1.htm">记住密码</a><a class="tag" taget="_blank" href="/search/cookie/1.htm">cookie</a><a class="tag" taget="_blank" href="/search/%E8%AE%B0%E4%BD%8F%E7%94%A8%E6%88%B7%E5%90%8D/1.htm">记住用户名</a><a class="tag" taget="_blank" href="/search/%E8%AE%B0%E4%BD%8F%E8%B4%A6%E5%8F%B7/1.htm">记住账号</a> <div>在页面中如何获取cookie值呢? 如果是JSP的话,可以通过servlet的对象request 获取cookie,可以 参考:http://hw1287789687.iteye.com/blog/2050040 如果要求登录页面是html呢?html页面中如何获取cookie呢? 直接上代码了 页面:loginInput.html 代码: <!DOCTYPE html PUB</div> </li> <li><a href="/article/3219.htm" title="开发者必备的 Chrome 扩展" target="_blank">开发者必备的 Chrome 扩展</a> <span class="text-muted">justjavac</span> <a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a> <div>Firebug:不用多介绍了吧https://chrome.google.com/webstore/detail/bmagokdooijbeehmkpknfglimnifench ChromeSnifferPlus:Chrome 探测器,可以探测正在使用的开源软件或者 js 类库https://chrome.google.com/webstore/detail/chrome-sniffer-pl</div> </li> <li><a href="/article/3346.htm" title="算法机试题" target="_blank">算法机试题</a> <span class="text-muted">李亚飞</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/%E6%9C%BA%E8%AF%95%E9%A2%98/1.htm">机试题</a> <div>       在面试机试时,遇到一个算法题,当时没能写出来,最后是同学帮忙解决的。        这道题大致意思是:输入一个数,比如4,。这时会输出:           &n</div> </li> <li><a href="/article/3473.htm" title="正确配置Linux系统ulimit值" target="_blank">正确配置Linux系统ulimit值</a> <span class="text-muted">字符串</span> <a class="tag" taget="_blank" href="/search/ulimit/1.htm">ulimit</a> <div>在Linux下面部 署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题;这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用 其实很容易就达到这个数量。下面说的是,如何通过正解配置来改正这个系统默认值。因为这个问题是我配置Nginx+php5时遇到了,所以我将这篇归纳进</div> </li> <li><a href="/article/3600.htm" title="hibernate调用返回游标的存储过程" target="_blank">hibernate调用返回游标的存储过程</a> <span class="text-muted">Supanccy2013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/jdbc/1.htm">jdbc</a> <div>注:原创作品,转载请注明出处。     上篇博文介绍的是hibernate调用返回单值的存储过程,本片博文说的是hibernate调用返回游标的存储过程。     此此扁博文的存储过程的功能相当于是jdbc调用select 的作用。 1,创建oracle中的包,并在该包中创建的游标类型。 ---创建oracle的程</div> </li> <li><a href="/article/3727.htm" title="Spring 4.2新特性-更简单的Application Event" target="_blank">Spring 4.2新特性-更简单的Application Event</a> <span class="text-muted">wiselyman</span> <a class="tag" taget="_blank" href="/search/application/1.htm">application</a> <div>1.1 Application Event Spring 4.1的写法请参考10点睛Spring4.1-Application Event 请对比10点睛Spring4.1-Application Event 使用一个@EventListener取代了实现ApplicationListener接口,使耦合度降低; 1.2 示例 包依赖 <p</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>