数据结构思维 第六章 树的遍历

第六章 树的遍历

原文:Chapter 6 Tree traversal

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

本章将介绍一个 Web 搜索引擎,我们将在本书其余部分开发它。我描述了搜索引擎的元素,并介绍了第一个应用程序,一个从维基百科下载和解析页面的 Web 爬行器。本章还介绍了深度优先搜索的递归实现,以及迭代实现,它使用 JavaDeque实现“后入先出”的栈。

6.1 搜索引擎

网络搜索引擎,像谷歌搜索或 Bing,接受一组“检索项”,并返回一个网页列表,它们和这些项相关(之后我将讨论“相关”是什么意思)。你可以在 http://thinkdast.com/searcheng 上阅读更多内容,但是我会解释你需要什么。

搜索引擎的基本组成部分是:

抓取:我们需要一个程序,可以下载网页,解析它,并提取文本和任何其他页面的链接。
索引:我们需要一个数据结构,可以查找一个检索项,并找到包含它的页面。
检索:我们需要一种方法,从索引中收集结果,并识别与检索项最相关的页面。

我们以爬虫开始。爬虫的目标是查找和下载一组网页。对于像 Google 和 Bing 这样的搜索引擎,目标是查找所有网页,但爬虫通常仅限于较小的域。在我们的例子中,我们只会读取维基百科的页面。

作为第一步,我们将构建一个读取维基百科页面的爬虫,找到第一个链接,并跟着链接来到另一个页面,然后重复。我们将使用这个爬虫来测试“到达哲学”的猜想,它是:

点击维基百科文章正文中的第一个小写的链接,然后对后续文章重复这个过程,通常最终会到达“哲学”的文章。

这个猜想在 http://thinkdast.com/getphil 中阐述,你可以阅读其历史。

测试这个猜想需要我们构建爬虫的基本部分,而不必爬取整个网络,甚至是所有维基百科。而且我觉得这个练习很有趣!

在几个章节之内,我们将处理索引器,然后我们将到达检索器。

6.2 解析 HTML

当你下载网页时,内容使用超文本标记语言(即 HTML)编写。例如,这里是一个最小的 HTML 文档:


<html>
  <head>
    <title>This is a titletitle>
  head>
  <body>
    <p>Hello world!p>
  body>
html>

短语This is a titleHello world!是实际出现在页面上的文字;其他元素是指示文本应如何显示的标签。

当我们的爬虫下载页面时,它需要解析 HTML,以便提取文本并找到链接。为此,我们将使用jsoup,它是一个下载和解析 HTML 的开源 Java 库。

解析 HTML 的结果是文档对象模型(DOM)树,其中包含文档的元素,包括文本和标签。树是由节点组成的链接数据结构;节点表示文本,标签和其他文档元素。

节点之间的关系由文档的结构决定。在上面的例子中,第一个节点称为根,是标签,它包含指向所包含两个节点的链接, ;这些节点是根节点的子节点。

节点有一个子节点,</code>,<code><body></code>节点有一个子节点, <code><p></code>(代表“段落”)。图 6.1 以图形方式表示该树。</p> <p></p> <p>图 6.1 简单 HTML 页面的 DOM 树</p> <p>每个节点包含其子节点的链接; 此外,每个节点都包含其父节点的链接,所以任何节点都可以向上或向下浏览树。实际页面的 DOM 树通常比这个例子更复杂。</p> <p>大多数网络浏览器提供了工具,用于检查你正在查看的页面的 DOM。在 Chrome 中,你可以右键单击网页的任何部分,然后从弹出的菜单中选择<code>Inspect</code>(检查)。在 Firefox 中,你可以右键单击并从菜单中选择<code>Inspect Element</code>(检查元素)。Safari 提供了一个名为 Web Inspector 的工具,你可以阅读 http://thinkdast.com/safari。对于 Internet Explorer,你可以阅读 http://thinkdast.com/explorer 上的说明 。</p> <p></p> <p>图 6.2:Chrome DOM 查看器的截图</p> <p>图 6.2 展示了维基百科 Java 页面(http://thinkdast.com/java)的 DOM 截图。高亮的元素是文章正文的第一段,它包含在一个<code><div></code>元素中 ,带有<code>id="mw-content-text"</code>。我们将使用这个元素 ID 来标识我们下载的每篇文章的正文。</p> <h2 id="63-使用jsoup">6.3 使用<code>jsoup</code></h2> <p><code>jsoup</code>非常易于下载,和解析 Web 页面,以及访问 DOM 树。这里是一个例子:</p> <pre class="prettyprint"><code class="language-java hljs ">String url = <span class="hljs-string">"http://en.wikipedia.org/wiki/Java_(programming_language)"</span>; <span class="hljs-comment">// download and parse the document</span> Connection conn = Jsoup.connect(url); Document doc = conn.get(); <span class="hljs-comment">// select the content text and pull out the paragraphs.</span> Element content = doc.getElementById(<span class="hljs-string">"mw-content-text"</span>); Elements paragraphs = content.select(<span class="hljs-string">"p"</span>);</code></pre> <p><code>Jsoup.connect</code>接受<code>String</code>形式的<code>url</code>,并连接 Web 服务器。<code>get</code>方法下载 HTML,解析,并返回<code>Document</code>对象,他表示 DOM。</p> <p><code>Document</code>提供了导航树和选择节点的方法。其实它提供了很多方法,可能会把人搞晕。此示例演示了两种选择节点的方式:</p> <ul> <li><code>getElementById</code>接受<code>String</code>并在树中搜索匹配<code>id</code>字段的元素。在这里,它选择节点<code><div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"></code>,它出现在每个维基页面上,来确定包含文章正文的<code><div></code>元素,而不是导航边栏和其他元素。<code>getElementById</code>的返回值是一个<code>Element</code>对象,代表这个<code><div></code>,并包含<code><div></code>中的元素作为后继节点。</li> <li><code>select</code>接受<code>String</code>,遍历树,并返回与所有元素,它的标签与<code>String</code>匹配。在这个例子中,它返回所有<code>content</code>中的段落标签。返回值是一个<code>Elements</code>对象。</li> </ul> <blockquote> <p>译者注:<code>select</code>方法接受 CSS 选择器,不仅仅能按照标签选择。请见 https://jsoup.org/apidocs/org/jsoup/select/Selector.html。</p> </blockquote> <p>在你继续之前,你应该仔细阅读这些类的文档,以便知道他们能做什么。最重要的类是<code>Element</code>,<code>Elements</code>和<code>Node</code>,你可以阅读 http://thinkdast.com/jsoupelt,http://thinkdast.com/jsoupelts 和 http://thinkdast.com/jsoupnode。</p> <p><code>Node</code>表示 DOM 树中的一个节点;有几个扩展<code>Node</code>的子类,其中包括 <code>Element</code>,<code>TextNode</code>,<code>DataNode</code>,和<code>Comment</code>。<code>Elements</code>是<code>Element</code>对象的<code>Collection</code>。</p> <p></p> <p>图 6.3:被选类的 UML 图,由<code>jsoup</code>提供。编辑:</p> <h2 id="64-遍历-dom">6.4 遍历 DOM</h2> <p>为了使你变得更轻松,我提供了一个<code>WikiNodeIterable</code>类,可以让你遍历 DOM 树中的节点。以下是一个示例,展示如何使用它:</p> <pre class="prettyprint"><code class="language-java hljs ">Elements paragraphs = content.select(<span class="hljs-string">"p"</span>); Element firstPara = paragraphs.get(<span class="hljs-number">0</span>); Iterable<Node> iter = <span class="hljs-keyword">new</span> WikiNodeIterable(firstPara); <span class="hljs-keyword">for</span> (Node node: iter) { <span class="hljs-keyword">if</span> (node <span class="hljs-keyword">instanceof</span> TextNode) { System.out.print(node); } }</code></pre> <p>这个例子紧接着上一个例子。它选择<code>paragraphs</code>中的第一个段落,然后创建一个<code>WikiNodeIterable</code>,它实现<code>Iterable<Node></code>。<code>WikiNodeIterable</code>执行“深度优先搜索”,它按照它们将出现在页面上的顺序产生节点。</p> <p>在这个例子中,仅当<code>Node</code>是<code>TextNode</code>时,我们打印它,并忽略其他类型的<code>Node</code>,特别是代表标签的<code>Element</code>对象。结果是没有任何标记的 HTML 段落的纯文本。输出为:</p> <pre class="prettyprint"><code class=" hljs vbnet">Java <span class="hljs-keyword">is</span> a general-purpose computer programming language that <span class="hljs-keyword">is</span> concurrent, <span class="hljs-keyword">class</span>-based, <span class="hljs-built_in">object</span>-oriented,[<span class="hljs-number">13</span>] <span class="hljs-keyword">and</span> specifically designed …</code></pre> <blockquote> <p>Java 是一种通用的计算机编程语言,它是并发的,基于类的,面向对象的,[13] 和特地设计的…</p> </blockquote> <h2 id="65-深度优先搜索">6.5 深度优先搜索</h2> <p>有几种方式可以合理地遍历一个树,每个都有不同的应用。我们从“深度优先搜索”(DFS)开始。DFS 从树的根节点开始,并选择第一个子节点。如果子节点有子节点,则再次选择第一个子节点。当它到达没有子节点的节点时,它回溯,沿树向上移动到父节点,在那里它选择下一个子节点,如果有的话;否则它会再次回溯。当它探索了根节点的最后一个子节点,就完成了。</p> <p>有两种常用的方式来实现 DFS,递归和迭代。递归实现简单优雅:</p> <pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">recursiveDFS</span>(Node node) { <span class="hljs-keyword">if</span> (node <span class="hljs-keyword">instanceof</span> TextNode) { System.out.print(node); } <span class="hljs-keyword">for</span> (Node child: node.childNodes()) { recursiveDFS(child); } }</code></pre> <p>这个方法对树中的每一个<code>Node</code>调用,从根节点开始。如果<code>Node</code>是一个<code>TextNode</code>,它打印其内容。如果<code>Node</code>有任何子节点,它会按顺序在每一个子节点上调用<code>recursiveDFS</code>。</p> <p>在这个例子中,我们在遍历子节点之前打印每个<code>TextNode</code>的内容,所以这是一个“前序”遍历的例子。你可以在 http://thinkdast.com/treetrav 上了解“前序”,“后序”和“中序”遍历。对于此应用程序,遍历顺序并不重要。</p> <p>通过进行递归调用,<code>recursiveDFS</code>使用调用栈(http://thinkdast.com/callstack)来跟踪子节点并以正确的顺序处理它们。作为替代,我们可以使用栈数据结构自己跟踪节点;如果我们这样做,我们可以避免递归并迭代遍历树。</p> <h2 id="66-java-中的栈">6.6 Java 中的栈</h2> <p>在我解释 DFS 的迭代版本之前,我将解释栈数据结构。我们将从栈的一般概念开始,我将使用小写<code>s</code>指代“栈”。然后我们将讨论两个 Java<code>interfaces</code>,它们定义了栈的方法:<code>Stack</code>和<code>Deque</code>。</p> <p>栈是与列表类似的数据结构:它是维护元素顺序的集合。栈和列表之间的主要区别是栈提供的方法较少。在通常的惯例中,它提供:</p> <p><code>push</code>:它将一个元素添加到栈顶。 <br> <code>pop</code>:它从栈中删除并返回最顶部的元素。 <br> <code>peek</code>:它返回最顶部的元素而不修改栈。 <br> <code>isEmpty</code>:表示栈是否为空。 <br> 因为<code>pop</code>总是返回最顶部的元素,栈也称为 LIFO,代表“后入先出”。栈的替代品是“队列”,它返回的元素顺序和添加顺序相同;即“先入先出(FIFO)。</p> <p>为什么栈和队列是有用的,可能不是很明显:它们不提供任何列表没有的功能;实际上它们提供的功能更少。那么为什么不使用列表的一切?有两个原因:</p> <ul> <li>如果你将自己限制于一小部分方法 - 也就是小型 API - 你的代码将更加易读,更不容易出错。例如,如果使用列表来表示栈,则可能会以错误的顺序删除元素。使用栈 API,这种错误在字面上是不可能的。避免错误的最佳方法是使它们不可能。</li> <li>如果一个数据结构提供了小型 API,那么它更容易实现。例如,实现栈的简单方法是单链表。当我们压入一个元素时,我们将它添加到列表的开头;当我们弹出一个元素时,我们在开头删除它。对于链表,在开头添加和删除是常数时间的操作,因此这个实现是高效的。相反,大型 API 更难实现高效。</li> </ul> <p>为了在 Java 中实现栈,你有三个选项:</p> <ul> <li>继续使用<code>ArrayList</code>或<code>LinkedList</code>。如果使用<code>ArrayList</code>,请务必从最后添加和删​​除,这是一个常数时间的操作。并且小心不要在错误的地方添加元素,或以错误的顺序删除它们。</li> <li>Java 提供了一个<code>Stack</code>类,它提供了一组标准的栈方法。但是这个类是 Java 的一个旧部分:它与 Java 集合框架不兼容,后者之后才出现。</li> <li>最好的选择可能是使用<code>Deque</code>接口的一个实现,如<code>ArrayDeque</code>。</li> </ul> <p><code>Deque</code>代表“双向队列”;它应该被发音为“deck”,但有些人叫它“deek”。在 Java 中, <code>Deque</code>接口提供<code>push</code>,<code>pop</code>,<code>peek</code>和<code>isEmpty</code>,因此你可以将<code>Deque</code>用作栈。它提供了其他方法,你可以阅读 http://thinkdast.com/deque,但现在我们不会使用它们。</p> <h2 id="67-迭代式-dfs">6.7 迭代式 DFS</h2> <p>这里是 DFS 的迭代版本,它使用<code>ArrayDeque</code>来表示<code>Node</code>对象的栈。</p> <pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">iterativeDFS</span>(Node root) { Deque<Node> stack = <span class="hljs-keyword">new</span> ArrayDeque<Node>(); stack.push(root); <span class="hljs-keyword">while</span> (!stack.isEmpty()) { Node node = stack.pop(); <span class="hljs-keyword">if</span> (node <span class="hljs-keyword">instanceof</span> TextNode) { System.out.print(node); } List<Node> nodes = <span class="hljs-keyword">new</span> ArrayList<Node>(node.childNodes()); Collections.reverse(nodes); <span class="hljs-keyword">for</span> (Node child: nodes) { stack.push(child); } } }</code></pre> <p>参数<code>root</code>是我们想要遍历的树的根节点,所以我们首先创建栈并将根节点压入它。</p> <p>循环持续到栈为空。每次迭代,它会从栈中弹出<code>Node</code>。如果它得到<code>TextNode</code>,它打印内容。然后它把子节点们压栈。为了以正确的顺序处理子节点,我们必须以相反的顺序将它们压栈; 我们通过将子节点复制成一个<code>ArrayList</code>,原地反转元素,然后遍历反转的<code>ArrayList</code>。</p> <p>DFS 的迭代版本的一个优点是,更容易实现为 Java<code>Iterator</code>;你会在下一章看到如何实现。</p> <p>但是首先,有一个<code>Deque</code>接口的最后的注意事项:除了<code>ArrayDeque</code>,Java 提供另一个<code>Deque</code>的实现,我们的老朋友<code>LinkedList</code>。<code>LinkedList</code>实现两个接口,<code>List</code>和<code>Deque</code>(还有<code>Queue</code>)。你得到哪个接口,取决于你如何使用它。例如,如果将<code>LinkedList</code>对象赋给<code>Deque</code>变量,如下所示:</p> <pre class="prettyprint"><code class="language-java hljs ">Deqeue<Node> deque = <span class="hljs-keyword">new</span> LinkedList<Node>();</code></pre> <p>你可以使用<code>Deque</code>接口中的方法,但不是所有<code>List</code>中的方法。如果你将其赋给<code>List</code>变量,像这样:</p> <pre class="prettyprint"><code class="language-java hljs ">List<Node> deque = <span class="hljs-keyword">new</span> LinkedList<Node>();</code></pre> <p>你可以使用<code>List</code>接口中的方法,但不是所有<code>Deque</code>中的方法。并且如果像这样赋值:</p> <pre class="prettyprint"><code class="language-java hljs ">LinkedList<Node> deque = <span class="hljs-keyword">new</span> LinkedList<Node>();</code></pre> <p>你可以使用所有方法,但是混合了来自不同接口的方法。你的代码会更不可读,并且更易于出错。</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1294727402294943744"></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">你可能感兴趣的:(数据结构,数据结构思维,中文版)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950231381485350912.htm" title="《极简思维》第三部分" target="_blank">《极简思维》第三部分</a> <span class="text-muted">小洋苏兮</span> <div>整理你的人际关系如何改善人际关系?摘录:因为人际关系问题是人们生活中不快乐的主要原因。感想:感觉这个说的挺对,之前我总是埋头学习,不管舍友不管自己的合作伙伴的一些事情,但实际上,这学期关注了之后好多了摘录:“亲密关系与社交会让你健康而快乐。这是基础。太过于关注成就或不太关心人际关系的人都不怎么快乐。基本上来说,人类就是建立在人脉关系上的。”感想:但是如果有时想的太多就不太好,要以一个开放的心态跟别</div> </li> <li><a href="/article/1950223243570900992.htm" title="12张思维导图读懂《关键对话》" target="_blank">12张思维导图读懂《关键对话》</a> <span class="text-muted">蜜蜂学堂</span> <div>你一定遇到过下列情况:·向上司提出你精心设计的方案,却被泼了一头冷水。·要求下属加班,下属以沉默相对抗。·和家人谈“开源节流”,他却只当是耳边风。·要邻居遵守公德,对方却依然我行我素。·要你的另一半浪漫些,对方却还是像根木头一样。·请朋友还钱,朋友却总是找各种借口推托。当你遇到这些情况时,你是沉默以对,还是尖刻批评,抑或拍案而起?别觉得灰心丧气,因为大部分人都和你一样,在面对难以解决却又会对生活产</div> </li> <li><a href="/article/1950215918101524480.htm" title="第二十二天(数据结构,无头节点的单项链表)" target="_blank">第二十二天(数据结构,无头节点的单项链表)</a> <span class="text-muted">肉夹馍不加青椒</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%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>线性表:一个线性表里面可以是任意的数据元素,但是同一个线性表里面数据应该是同类型的1存在一个/唯一被称为第一个节点的节点2存在一个/唯一被称为最后一个节点的节点3除了第一个以外,每一个元素都有一个前驱节点4除了最后一个,每一个元素都有一个后继节点满足以上性质,这个表就被称为线性表数组就是一个线性表想实现线性表的保存,我们需要考虑下面的事情1元素要保存2元素与元素之间的序偶关系谁是前面的谁是后面的我</div> </li> <li><a href="/article/1950194363741040640.htm" title="文科生转行编程:从月薪 3 千到 2 万的真实经历" target="_blank">文科生转行编程:从月薪 3 千到 2 万的真实经历</a> <span class="text-muted"></span> <div>在当下就业市场中,文科生往往面临诸多挑战,薪资水平也不尽如人意。然而,有不少勇敢的文科生成功实现了向编程领域的转行,薪资更是实现了从月薪3千到2万的飞跃。本文将深入剖析文科生转行编程的真实经历,从最初对现状的不满萌生出转行念头,到如何艰难地开启学习之旅,克服基础薄弱、思维转换难等重重困难,再到求职时凭借策略与努力获得宝贵机会,以及入职后持续学习保持竞争力。希望通过这些真实历程,为有志于转行编程的文</div> </li> <li><a href="/article/1950188494836002816.htm" title="好可怕୧( ⁼̴̶̤̀ω⁼̴̶̤́ )૭人会因为思维狭隘而限制自己的选择范围,并且导致做出糟糕选择" target="_blank">好可怕୧( ⁼̴̶̤̀ω⁼̴̶̤́ )૭人会因为思维狭隘而限制自己的选择范围,并且导致做出糟糕选择</a> <span class="text-muted">寻世良方Cc_Sandy拎0</span> <div>人间天堂举个例子,希思兄弟指出,青少年们的决定中,有65%左右都属于表决心式和“是否式”决定。表决心式决定是类似于“我再也不吃垃圾食品”这种;“是否式”决定指的是像“我要不要吃炸鸡”,或者“我要不要跟男朋友分手”这种决定。作者说,这其实是一种“认知气泡”。在“认知气泡”里面,人们看不到更多的选择,相当于思维被局限住。而且,这种现象不仅仅是青少年中会出现,成熟的组织也会犯同样的错误。比如,公司在收购</div> </li> <li><a href="/article/1950187221080403968.htm" title="《终身成长》之每日领读" target="_blank">《终身成长》之每日领读</a> <span class="text-muted">恩佳一</span> <div>【昵称】锡安之燕【书名】《终身成长》【阅读时长】30分钟【阅读内容】第四章《天赋与天才》【原文金句】1.人的思维模式比天赋更重要。2.在我们的文化中,无论怎么强调个人努力和自我提高的重要性,人们在心灵深处,依然崇尚天赋。【三个问题】:1、结合之前学过的知识,说一说固定型思维模式的人,在面对失败的时候会怎样做?固定型思维模式的人面对失败会自卑,不自信,会停滞不前或就此被打倒。2、身体上的天赋是显而易</div> </li> <li><a href="/article/1950186586658369536.htm" title="5.2 20190503" target="_blank">5.2 20190503</a> <span class="text-muted">MaggieFeng1988</span> <div>姓名:冯进平公司:上海晋名实业有限公司【日精进打卡第403天】六项精进221期努力一组学员六项精进410期乐观三组志工六项精进423期反省三组志工六项精进469期努力二组志工【知~学习】诵读《六项精进》大纲0遍,共513遍;诵读《六项精进》通篇0遍,共33遍;背诵《大学》0遍,共492遍;阅读《活法》贰第053–063也;荔枝阅读《思维方式》020-036《敬天爱人》手抄第十二天【经典名句】1.放</div> </li> <li><a href="/article/1950184804079169536.htm" title="思维导图中的3A" target="_blank">思维导图中的3A</a> <span class="text-muted">画画的小常</span> <div>图片发自App在学习思维导图3A之前,我们先来看看东方古国传统教书过程。分三步:听话,合作,变化。听话,学生摹仿老师,在这个过程中除非必需问题需要老师澄清解释,其他所有的都要求先行记忆。合作,这一阶段大多已经掌握基本知识点,允许学生提出问题,老师引导学生采用合适的方法,让学生亲自动手,解决问题。变化,经历了前面2个阶段,知识已经彻底掌握,此阶段要充分发挥洞察力和生发出新的思想以回馈老师。较之传统教</div> </li> <li><a href="/article/1950184799020838912.htm" title="初探数学思维(一):数学概括" target="_blank">初探数学思维(一):数学概括</a> <span class="text-muted">JackyFuu</span> <div>数学培养规则意识;培养周密思维和创新能力“现代电子计算机之父”冯·诺依曼对微积分的评价:微积分是现代数学的第一个成就,而且怎样评价它的重要性都不为过。我认为,微积分比其他任何事物都更清楚地表明了现代数学的发端;而且,作为其逻辑发展的数学分析体系仍然构成了精密思维中最伟大的技术进展。《GEB-一条永恒的金带》,普利策奖,1979,美国,指出有一条永恒的金带把数理逻辑、绘画、音乐等不同领域之间的共同规</div> </li> <li><a href="/article/1950179451039969280.htm" title="《应对焦虑》做好4点帮你轻松化解焦虑,并从焦虑中走出来" target="_blank">《应对焦虑》做好4点帮你轻松化解焦虑,并从焦虑中走出来</a> <span class="text-muted">程杰读书</span> <div>你焦虑过吗?有被焦虑困扰过吗?那么什么是焦虑呢?焦虑就是对亲人或自己生命安全,前途命运等的过度担心,而产生的一种烦躁情绪。我曾经有一段时间也特别焦虑。那是在一年前由于孩子的数学成绩很差,思维跟不上。我经常辅导她,就是不开窍。把我气的心脏快炸了。怎么办呢?眼看就要上小学高年级了。心里那个着急啊,真的是无处可说。于是就在网校上报了名,让专业老师来辅导。可她对待作业都是马马虎虎,一点都不认真。眼看一学期</div> </li> <li><a href="/article/1950175508729753600.htm" title="08.学习闭环三部曲:预习、实时学习、复习" target="_blank">08.学习闭环三部曲:预习、实时学习、复习</a> <span class="text-muted">0058b195f4dc</span> <div>人生就是一本效率手册,你怎样对待时间,时间就会给你同比例的回馈。单点突破法。预习,实时学习,复习。1、预习:凡事提前【计划】(1)前一晚设置三个当日目标。每周起始于每周日。(2)提前学习。预习法进行思考。预不预习效果相差20%,预习法学会提问。(3)《学会提问》。听电子书。2.实时学习(1)(10%)相应场景,思维导图,快速笔记。灵感笔记。(2)大纲,基本记录,总结篇。3.复习法则,(70%),最</div> </li> <li><a href="/article/1950172590916038656.htm" title="领略商业之美" target="_blank">领略商业之美</a> <span class="text-muted">苏黛_love</span> <div>从明天起,我要做一个会育儿、懂商业的妈妈。学习商业大课之《认知商业》《觉性智慧》的收获:1、商业是帮助我们赚钱的必备技能,从此不再排斥商业,对财富说是。2、老王说,普通人的商业思维就是:你能用已经验证的商业规则来帮助自己赚钱。我的理解:有模板,永就好了。3、有的人喜欢钱,不喜欢赚钱··········哈哈哈——现在,我认为这是对没有挣钱的能力和怕辛苦的掩饰罢了。4、商业大课上要转变的一个思维:挣钱</div> </li> <li><a href="/article/1950166876634017792.htm" title="如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器" target="_blank">如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器</a> <span class="text-muted">山岚的运维笔记</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E5%8F%8A%E4%BD%BF%E7%94%A8/1.htm">运维及使用</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>Redis(RemoteDictionaryServer,远程字典服务器)是一种内存数据结构存储,通常用作NoSQL数据库、缓存和消息代理。它是开源的,因此用户可以免费安装,无需支付任何费用。Redis旨在为需要快速数据访问和低延迟的应用程序提供速度和效率。Redis支持多种数据类型,包括字符串(Strings)、列表(Lists)、集合(Sets)、哈希(Hashes)、有序集合(SortedS</div> </li> <li><a href="/article/1950161707464716288.htm" title="Ubuntu Docker 安装Redis" target="_blank">Ubuntu Docker 安装Redis</a> <span class="text-muted">LLLL96</span> <a class="tag" taget="_blank" href="/search/Ubuntu/1.htm">Ubuntu</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a> <div>目录介绍1.数据结构丰富2.高性能3.持久化1.拉取Redis镜像2.创建挂载目录(可选)3.配置Redis持久化(可选)4.使用配置文件运行容器5.查看redis日志介绍1.数据结构丰富Redis支持多种数据结构,包括:字符串(String):可以用来存储任何类型的数据,例如文本、数字或二进制数据。哈希(Hash):存储字段和值的映射,适合用于表示对象。列表(List):有序的字符串列表,可以用</div> </li> <li><a href="/article/1950160766531334144.htm" title="38岁,男,月薪3500:受害者思维,正在透支你的人生" target="_blank">38岁,男,月薪3500:受害者思维,正在透支你的人生</a> <span class="text-muted">阿聊不见了</span> <div>大家好,我是阿聊。前段时间回老家的时候,碰到一个以前的邻居。这位邻居,曾经一度是妈妈口中的“别人家的孩子”。在大学生还没泛滥的时候,考上了大学,毕业后听从家里安排,回到小县城,进了一家事业单位。谁知,工作后,他的人生仿佛突然就开始走起了下坡路。工作多年,岗位就没挪动过,近二十年的职场生涯,甚至只被提拔了一次,如今38岁了,月薪3500,且涨薪无望。婚姻也不顺利,30岁左右成婚,婚后不到3年,妻子跟</div> </li> <li><a href="/article/1950160194403102720.htm" title="Java:数据结构-ArrayList和顺序表(2)" target="_blank">Java:数据结构-ArrayList和顺序表(2)</a> <span class="text-muted">blammmp</span> <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%E7%BB%93%E6%9E%84/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>一ArrayList的使用1.ArrayList的构造方法第一种(指定容量的构造方法)创建一个空的ArrayList,指定容量为initialCapacity。publicArrayList(intinitialCapacity){if(initialCapacity>0){this.elementData=newObject[initialCapacity];}elseif(initialCap</div> </li> <li><a href="/article/1950155407980818432.htm" title="谈谈自己在成长过程中所经历的最大的一次转变" target="_blank">谈谈自己在成长过程中所经历的最大的一次转变</a> <span class="text-muted">镜子写作</span> <div>人生所经历过的转变,我觉得最大的转变是思维上的转变。2019年4月12号,我去到了深圳,参加了慰安老师的超级演说家,三天两夜,这三天两夜改变了我人生的思想局限,以前的我一直认为,所有的不好都是别人造成的。在生活和工作上一直处于埋怨的状态,从来都没有想过改变自己,环境是无法改变的,改变自己才能够让自己过得更好。曾经的我一直都是躲在最让人看不见的位置,老师讲我负责听,讲台离我很远,我也从没想过要站到讲</div> </li> <li><a href="/article/1950154776767426560.htm" title="【数据结构】--ArrayList与顺序表" target="_blank">【数据结构】--ArrayList与顺序表</a> <span class="text-muted">bubu__</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>文章目录1.线性表2.顺序表3.ArrayList简介4.MyArrayList的实现5.ArrayList使用5.1ArrayList的构造5.2ArrayList常见操作5.3ArrayList的遍历5.4ArrayList的扩容机制6.ArrayList的具体使用6.1简单的洗牌算法6.2杨辉三角1.线性表线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实</div> </li> <li><a href="/article/1950151117719531520.htm" title="数据结构2-集合类ArrayList与洗牌算法" target="_blank">数据结构2-集合类ArrayList与洗牌算法</a> <span class="text-muted"></span> <div>文章目录★引言:一.MyArrayList模拟实现(一)IList(二)MyArrayList(1)add(Tdata)(2)add(intpos,Tdata)(3)IllgalPosException(4)indexOf(ObjecttoFind)(5)contains(ObjecttoFind)(6)get(intpos)(7)set(intpos,Tvalue)(8)remove(Objec</div> </li> <li><a href="/article/1950144086069538816.htm" title="世上无难事,只要肯放弃" target="_blank">世上无难事,只要肯放弃</a> <span class="text-muted">七宝不离十</span> <div>大力出奇迹的解释,是指在解决单个问题上投入了很大的力量,但最终获得了影响力、竞争优势、护城河……然后我脑子里闪现的第一个男人头像是愚公,女人头像是居里夫人。他(她)们的故事已经广为传颂,这种不为所动,努力搞事情的精神可以投射到各个领域。我的理解,是不畏困难,不随机应变。我认为大力出奇迹的赚钱案例,首推罗胖---罗振宇的逻辑思维。我最早知道逻辑思维,是因为罗胖每天60秒的语音播报,然后一直跟着他《得</div> </li> <li><a href="/article/1950138760230400000.htm" title="C语言基础-数组和指针的区别" target="_blank">C语言基础-数组和指针的区别</a> <span class="text-muted">阿部春光</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%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>在C语言中,数组和指针是两个密切相关但又有显著区别的概念。下面我会详细解释它们之间的区别和联系。区别数组和指针在C语言中虽然经常一起使用,但它们是两个不同的概念,具有一些关键的区别:本质不同:数组:数组是一种数据结构,用于存储固定数量的同类型元素的连续内存块。数组名在某些上下文中(如取地址操作或sizeof操作符)代表整个数组,但在其他上下文中(如作为函数参数或用于指针算术)通常退化为指向数组第一</div> </li> <li><a href="/article/1950134096558616576.htm" title="Python STL概念学习与代码实践" target="_blank">Python STL概念学习与代码实践</a> <span class="text-muted">体制教科书</span> <div>本文还有配套的精品资源,点击获取简介:通过”py_stl_learning”项目,学习者可以使用Python实现和理解C++STL的概念,包括数据结构、算法、容器适配器、模板和泛型容器等。Python中的列表、集合、字典等数据结构与STL中的vector、set、map等类似,而Python的itertools和functools模块提供了STL风格的算法功能。Python通过其面向对象的特性以及</div> </li> <li><a href="/article/1950132504585367552.htm" title="普通人,现在想快挣钱、挣快钱,这几个小生意都比较靠谱!" target="_blank">普通人,现在想快挣钱、挣快钱,这几个小生意都比较靠谱!</a> <span class="text-muted">高省APP珊珊</span> <div>时代不同了,挣钱的规则和途径都在迭代,那么,对于普通人而言,改变思维和行动,自然成为其挣钱多少的关键。我是建议,在当前市场经济形势下,资源匮乏、资金短缺、没有人脉背景的普通人,还是去做一些离钱近的小生意,这样不仅仅可以快挣钱、挣快钱,而且没有太大压力,譬如下面这几个小生意,都比较靠谱一些,建议考察。高省APP,是2021年推出的平台,0投资,0风险、高省APP佣金更高,模式更好,终端用户不流失。【</div> </li> <li><a href="/article/1950128298788974592.htm" title="Redis五大基本数据类型" target="_blank">Redis五大基本数据类型</a> <span class="text-muted">ruan114514</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</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%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Redis作为高性能的键值存储系统,其核心价值在于丰富的数据结构。本文将深入剖析Redis的五种基本数据类型,揭示其内部实现原理,并提供实际应用场景和最佳实践。一、字符串(String):Redis的基石底层实现Redis字符串使用简单动态字符串(SDS)结构:structsdshdr{intlen;//已使用长度intfree;//未使用空间charbuf[];//字节数组};优势特性:O(1)</div> </li> <li><a href="/article/1950111155183742976.htm" title="跳表:来自概率的优雅平衡" target="_blank">跳表:来自概率的优雅平衡</a> <span class="text-muted">allenXer</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">算法与数据结构</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>跳表:来自概率的优雅平衡从抛硬币到Redis核心,跳表如何用随机性颠覆数据结构设计引言:平衡的艺术在计算机科学的世界里,数据结构的设计者一直在追求一种完美平衡:快速查询的同时保持高效的插入和删除。平衡树(如AVL树、红黑树)曾是这个领域的王者,但它们的复杂性令人望而生畏。直到1989年,计算机科学家WilliamPugh提出了一种革命性的数据结构——跳表(SkipList),它用概率的魔力实现了近</div> </li> <li><a href="/article/1950108456342056960.htm" title="第六天作业" target="_blank">第六天作业</a> <span class="text-muted">宇宇妈妈_e088</span> <div>对换框法中的“二者兼得”的理解和认识。二者兼得:无论我面对怎样的情况,无论选择是多么的困难,我都努力的去让更多的可能出现,我要始终去思考,怎样才能够更全面,怎样都会达到我想要的,我要灵活的去做,我要有效的去努力,我要坚持的去付出。如果没有达到我想要的,我要不断去检视我自己,我的思维是否灵活我是否去行动了,我的方法是否有效,我是否够努力,我的行动是否坚持,我是否够付出当您深刻感悟到了“二者兼得”背后</div> </li> <li><a href="/article/1950099932132208640.htm" title="vue2中实现leader-line-vue连线文章对应字符" target="_blank">vue2中实现leader-line-vue连线文章对应字符</a> <span class="text-muted">小莉爱编程</span> <a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/bug%E8%AE%B0%E5%BD%95/1.htm">bug记录</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>效果展示通过点击右边的tag,触发连接操作第一步:获取右边tag展示1.右边的tag列表展示,我这边是分为两个list嵌套的数据结构;{"人员":[{</div> </li> <li><a href="/article/1950099528199761920.htm" title="京东返利平台推荐,京东返利app哪个最好?" target="_blank">京东返利平台推荐,京东返利app哪个最好?</a> <span class="text-muted">古楼</span> <div>京东作为中国知名的电商平台,为广大消费者提供了丰富的商品和服务。在购物过程中,一些细心的消费者可能会发现,京东也有返利平台,那么,京东有没有返利APP呢?如果有的话,哪个返利APP最好呢?本文将为您解答这些问题。月入十万必看!都在挣钱!推荐几个月入几千到几万的靠谱副业项目!(公众号:善士思维笔记)【高省】APP(高佣金领导者)是一个自用省钱佣金高,分享推广赚钱多的平台,2000万用户信赖的四年老平</div> </li> <li><a href="/article/1950099272712122368.htm" title="2021-6-1晨间日记" target="_blank">2021-6-1晨间日记</a> <span class="text-muted">倏尔挥锋至</span> <div>今天是什么日子起床:六点就寝:七点天气:晴心情:大好纪念日:六一国际儿童节任务清单昨日完成的任务,最重要的三件事:成本估算,备案资料,和心仪女孩表白改进:更高效,更全面,更真诚习惯养成:每天写文章,整理自己的思维,每天跑步,锻炼意志周目标·完成进度完成备案资料编写,完成百分之二十学习·信息·阅读学习文章写作方法,精析健康·饮食·锻炼每日坚持快走工作·思考人生是一场旅行,沿途的风景很美,终点必然到来</div> </li> <li><a href="/article/1950084934404206592.htm" title="Nvivo20 中文版安装包免费下载附详细安装教程|Nvivo20软件下载" target="_blank">Nvivo20 中文版安装包免费下载附详细安装教程|Nvivo20软件下载</a> <span class="text-muted"></span> <div>[下载通道]:迅雷网盘[下载链接]:点击高速下载https://pan.xunlei.com/s/VOWJoryt_BBFsPixpPJxB1f0A1?pwd=5cei#⚠️:先用手机下载迅雷网盘保存到手机中,再用电脑登录下载,否则下载后文件容易报错❗保存的朋友点赞支持一下❗更多免费软件,影视,歌曲,游戏点这里https://docs.qq.com/sheet/DRkdWVFFCWm9UeGJP?</div> </li> <li><a href="/article/25.htm" title="Java实现的简单双向Map,支持重复Value" target="_blank">Java实现的简单双向Map,支持重复Value</a> <span class="text-muted">superlxw1234</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8F%8C%E5%90%91map/1.htm">双向map</a> <div>关键字:Java双向Map、DualHashBidiMap     有个需求,需要根据即时修改Map结构中的Value值,比如,将Map中所有value=V1的记录改成value=V2,key保持不变。   数据量比较大,遍历Map性能太差,这就需要根据Value先找到Key,然后去修改。   即:既要根据Key找Value,又要根据Value</div> </li> <li><a href="/article/152.htm" title="PL/SQL触发器基础及例子" target="_blank">PL/SQL触发器基础及例子</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/oracle%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">oracle数据库</a><a class="tag" taget="_blank" href="/search/%E8%A7%A6%E5%8F%91%E5%99%A8/1.htm">触发器</a><a class="tag" taget="_blank" href="/search/PL%2FSQL%E7%BC%96%E7%A8%8B/1.htm">PL/SQL编程</a> <div>  触发器的简介; 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。触发器和过程函数类似 过程函数必须要调用,   一个表中最多只能有12个触发器类型的,触发器和过程函数相似 触发器不需要调用直接执行, 触发时间:指明触发器何时执行,该值可取: before:表示在数据库动作之前触发</div> </li> <li><a href="/article/279.htm" title="[时空与探索]穿越时空的一些问题" target="_blank">[时空与探索]穿越时空的一些问题</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E9%97%AE%E9%A2%98/1.htm">问题</a> <div>       我们还没有进行过任何数学形式上的证明,仅仅是一个猜想.....       这个猜想就是; 任何有质量的物体(哪怕只有一微克)都不可能穿越时空,该物体强行穿越时空的时候,物体的质量会与时空粒子产生反应,物体会变成暗物质,也就是说,任何物体穿越时空会变成暗物质..(暗物质就我的理</div> </li> <li><a href="/article/406.htm" title="easy ui datagrid上移下移一行" target="_blank">easy ui datagrid上移下移一行</a> <span class="text-muted">商人shang</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E4%B8%8A%E7%A7%BB%E4%B8%8B%E7%A7%BB/1.htm">上移下移</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/datagrid/1.htm">datagrid</a> <div>/** * 向上移动一行 * * @param dg * @param row */ function moveupRow(dg, row) { var datagrid = $(dg); var index = datagrid.datagrid("getRowIndex", row); if (isFirstRow(dg, row)) {</div> </li> <li><a href="/article/533.htm" title="Java反射" target="_blank">Java反射</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/%E5%8F%8D%E5%B0%84/1.htm">反射</a> <div>本人菜鸟,今天恰好有时间,写写博客,总结复习一下java反射方面的知识,欢迎大家探讨交流学习指教 首先看看java中的Class package demo; public class ClassTest { /*先了解java中的Class*/ public static void main(String[] args) { //任何一个类都</div> </li> <li><a href="/article/660.htm" title="springMVC 使用JSR-303 Validation验证" target="_blank">springMVC 使用JSR-303 Validation验证</a> <span class="text-muted">杨白白</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a> <div>JSR-303是一个数据验证的规范,但是spring并没有对其进行实现,Hibernate Validator是实现了这一规范的,通过此这个实现来讲SpringMVC对JSR-303的支持。 JSR-303的校验是基于注解的,首先要把这些注解标记在需要验证的实体类的属性上或是其对应的get方法上。 登录需要验证类 public class Login { @NotEmpty</div> </li> <li><a href="/article/787.htm" title="log4j" target="_blank">log4j</a> <span class="text-muted">香水浓</span> <a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a> <div> log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, HTML, DATABASE #log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, ROLLINGFILE, HTML #console log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4</div> </li> <li><a href="/article/914.htm" title="使用ajax和history.pushState无刷新改变页面URL" target="_blank">使用ajax和history.pushState无刷新改变页面URL</a> <span class="text-muted">agevs</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a> <div>表现 如果你使用chrome或者firefox等浏览器访问本博客、github.com、plus.google.com等网站时,细心的你会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变。并且能够很好的支持浏览器前进和后退。 是什么有这么强大的功能呢? HTML5里引用了新的API,history.pushState和history.replaceState,就是通过</div> </li> <li><a href="/article/1041.htm" title="centos中文乱码" target="_blank">centos中文乱码</a> <span class="text-muted">AILIKES</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a><a class="tag" taget="_blank" href="/search/ssh/1.htm">ssh</a> <div>一、CentOS系统访问 g.cn ,发现中文乱码。 于是用以前的方式:yum -y install fonts-chinese CentOS系统安装后,还是不能显示中文字体。我使用 gedit 编辑源码,其中文注释也为乱码。       后来,终于找到以下方法可以解决,需要两个中文支持的包: fonts-chinese-3.02-12.</div> </li> <li><a href="/article/1168.htm" title="触发器" target="_blank">触发器</a> <span class="text-muted">baalwolf</span> <a class="tag" taget="_blank" href="/search/%E8%A7%A6%E5%8F%91%E5%99%A8/1.htm">触发器</a> <div>触发器(trigger):监视某种情况,并触发某种操作。 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 语法: create trigger triggerName after/before </div> </li> <li><a href="/article/1295.htm" title="JS正则表达式的i m g" target="_blank">JS正则表达式的i m g</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><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>        g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止。         i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写。         m:表示</div> </li> <li><a href="/article/1422.htm" title="HTML5模式和Hashbang模式" target="_blank">HTML5模式和Hashbang模式</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/Hashbang%E6%A8%A1%E5%BC%8F/1.htm">Hashbang模式</a><a class="tag" taget="_blank" href="/search/HTML5%E6%A8%A1%E5%BC%8F/1.htm">HTML5模式</a> <div>        我们可以用$locationProvider来配置$location服务(可以采用注入的方式,就像AngularJS中其他所有东西一样)。这里provider的两个参数很有意思,介绍如下。 html5Mode         一个布尔值,标识$location服务是否运行在HTML5模式下。 ha</div> </li> <li><a href="/article/1549.htm" title="[Maven学习笔记六]Maven生命周期" target="_blank">[Maven学习笔记六]Maven生命周期</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>从mvn test的输出开始说起   当我们在user-core中执行mvn test时,执行的输出如下:   /software/devsoftware/jdk1.7.0_55/bin/java -Dmaven.home=/software/devsoftware/apache-maven-3.2.1 -Dclassworlds.conf=/software/devs</div> </li> <li><a href="/article/1676.htm" title="【Hadoop七】基于Yarn的Hadoop Map Reduce容错" target="_blank">【Hadoop七】基于Yarn的Hadoop Map Reduce容错</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>运行于Yarn的Map Reduce作业,可能发生失败的点包括 Task Failure Application Master Failure Node Manager Failure Resource Manager Failure 1. Task Failure 任务执行过程中产生的异常和JVM的意外终止会汇报给Application Master。僵死的任务也会被A</div> </li> <li><a href="/article/1803.htm" title="记一次数据推送的异常解决端口解决" target="_blank">记一次数据推送的异常解决端口解决</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/%E8%AE%B0%E4%B8%80%E6%AC%A1%E6%95%B0%E6%8D%AE%E6%8E%A8%E9%80%81%E7%9A%84%E5%BC%82%E5%B8%B8%E8%A7%A3%E5%86%B3/1.htm">记一次数据推送的异常解决</a> <div>   需求:从db获取数据然后推送到B         程序开发完成,上jboss,刚开始报了很多错,逐一解决,可最后显示连接不到数据库。机房的同事说可以ping 通。     自已画了个图,逐一排除,把linux 防火墙 和 setenforce 设置最低。    service iptables stop </div> </li> <li><a href="/article/1930.htm" title="巧用视错觉-UI更有趣" target="_blank">巧用视错觉-UI更有趣</a> <span class="text-muted">brotherlamp</span> <a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/ui%E8%A7%86%E9%A2%91/1.htm">ui视频</a><a class="tag" taget="_blank" href="/search/ui%E6%95%99%E7%A8%8B/1.htm">ui教程</a><a class="tag" taget="_blank" href="/search/ui%E8%87%AA%E5%AD%A6/1.htm">ui自学</a><a class="tag" taget="_blank" href="/search/ui%E8%B5%84%E6%96%99/1.htm">ui资料</a> <div>我们每个人在生活中都曾感受过视错觉(optical illusion)的魅力。 视错觉现象是双眼跟我们开的一个玩笑,而我们往往还心甘情愿地接受我们看到的假象。其实不止如此,视觉错现象的背后还有一个重要的科学原理——格式塔原理。 格式塔原理解释了人们如何以视觉方式感觉物体,以及图像的结构,视角,大小等要素是如何影响我们的视觉的。 在下面这篇文章中,我们首先会简单介绍一下格式塔原理中的基本概念,</div> </li> <li><a href="/article/2057.htm" title="线段树-poj1177-N个矩形求边长(离散化+扫描线)" target="_blank">线段树-poj1177-N个矩形求边长(离散化+扫描线)</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/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/%E7%BA%BF%E6%AE%B5%E6%A0%91/1.htm">线段树</a> <div>package com.ljn.base; import java.util.Arrays; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; /** * POJ 1177 (线段树+离散化+扫描线),题目链接为http://poj.org/problem?id=1177 </div> </li> <li><a href="/article/2184.htm" title="HTTP协议详解" target="_blank">HTTP协议详解</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/http%E5%8D%8F%E8%AE%AE/1.htm">http协议</a> <div>引言                                 </div> </li> <li><a href="/article/2311.htm" title="Scala设计模式" target="_blank">Scala设计模式</a> <span class="text-muted">chenchao051</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/scala/1.htm">scala</a> <div>Scala设计模式                我的话: 在国外网站上看到一篇文章,里面详细描述了很多设计模式,并且用Java及Scala两种语言描述,清晰的让我们看到各种常规的设计模式,在Scala中是如何在语言特性层面直接支持的。基于文章很nice,我利用今天的空闲时间将其翻译,希望大家能一起学习,讨论。翻译</div> </li> <li><a href="/article/2438.htm" title="安装mysql" target="_blank">安装mysql</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E8%A3%85/1.htm">安装</a> <div>安装mysql   (1)删除linux上已经安装的mysql相关库信息。rpm  -e  xxxxxxx   --nodeps (强制删除)      执行命令rpm -qa |grep mysql 检查是否删除干净   (2)执行命令  rpm -i MySQL-server-5.5.31-2.el</div> </li> <li><a href="/article/2565.htm" title="HTTP状态码大全" target="_blank">HTTP状态码大全</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/http%E7%8A%B6%E6%80%81%E7%A0%81/1.htm">http状态码</a> <div>完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D在线查阅。HTTP 1.1的状态码被标记为新特性,因为许多浏览器只支持 HTTP 1.0。你应只把状态码发送给支持 HTTP 1.1的客户端,支持协议版本可以通过调用request</div> </li> <li><a href="/article/2692.htm" title="asihttprequest上传图片" target="_blank">asihttprequest上传图片</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/ASIHTTPRequest/1.htm">ASIHTTPRequest</a> <div>NSURL *url =@"yourURL"; ASIFormDataRequest*currentRequest =[ASIFormDataRequest requestWithURL:url]; [currentRequest setPostFormat:ASIMultipartFormDataPostFormat];[currentRequest se</div> </li> <li><a href="/article/2819.htm" title="C语言中,关键字static的作用" target="_blank">C语言中,关键字static的作用</a> <span class="text-muted">e200702084</span> <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><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a> <div>在C语言中,关键字static有三个明显的作用: 1)在函数体,局部的static变量。生存期为程序的整个生命周期,(它存活多长时间);作用域却在函数体内(它在什么地方能被访问(空间))。 一个被声明为静态的变量在这一函数被调用过程中维持其值不变。因为它分配在静态存储区,函数调用结束后并不释放单元,但是在其它的作用域的无法访问。当再次调用这个函数时,这个局部的静态变量还存活,而且用在它的访</div> </li> <li><a href="/article/2946.htm" title="win7/8使用curl" target="_blank">win7/8使用curl</a> <span class="text-muted">geeksun</span> <a class="tag" taget="_blank" href="/search/win7/1.htm">win7</a> <div>1.  WIN7/8下要使用curl,需要下载curl-7.20.0-win64-ssl-sspi.zip和Win64OpenSSL_Light-1_0_2d.exe。 下载地址:  http://curl.haxx.se/download.html 请选择不带SSL的版本,否则还需要安装SSL的支持包   2.  可以给Windows增加c</div> </li> <li><a href="/article/3073.htm" title="Creating a Shared Repository; Users Sharing The Repository" target="_blank">Creating a Shared Repository; Users Sharing The Repository</a> <span class="text-muted">hongtoushizi</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>转载自:   http://www.gitguys.com/topics/creating-a-shared-repository-users-sharing-the-repository/ Commands discussed in this section: git init –bare git clone git remote git pull git p</div> </li> <li><a href="/article/3200.htm" title="Java实现字符串反转的8种或9种方法" target="_blank">Java实现字符串反转的8种或9种方法</a> <span class="text-muted">Josh_Persistence</span> <a class="tag" taget="_blank" href="/search/%E5%BC%82%E6%88%96%E5%8F%8D%E8%BD%AC/1.htm">异或反转</a><a class="tag" taget="_blank" href="/search/%E9%80%92%E5%BD%92%E5%8F%8D%E8%BD%AC/1.htm">递归反转</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%88%86%E4%BA%A4%E6%8D%A2%E5%8F%8D%E8%BD%AC/1.htm">二分交换反转</a><a class="tag" taget="_blank" href="/search/java%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8F%8D%E8%BD%AC/1.htm">java字符串反转</a><a class="tag" taget="_blank" href="/search/%E6%A0%88%E5%8F%8D%E8%BD%AC/1.htm">栈反转</a> <div>注:对于第7种使用异或的方式来实现字符串的反转,如果不太看得明白的,可以参照另一篇博客: http://josh-persistence.iteye.com/blog/2205768   /** * */ package com.wsheng.aggregator.algorithm.string; import java.util.Stack; /** </div> </li> <li><a href="/article/3327.htm" title="代码实现任意容量倒水问题" target="_blank">代码实现任意容量倒水问题</a> <span class="text-muted">home198979</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</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%80%92%E6%B0%B4/1.htm">倒水</a> <div>形象化设计模式实战             HELLO!架构                     redis命令源码解析   倒水问题:有两个杯子,一个A升,一个B升,水有无限多,现要求利用这两杯子装C</div> </li> <li><a href="/article/3454.htm" title="Druid datasource" target="_blank">Druid datasource</a> <span class="text-muted">zhb8015</span> <a class="tag" taget="_blank" href="/search/druid/1.htm">druid</a> <div>推荐大家使用数据库连接池 DruidDataSource. http://code.alibabatech.com/wiki/display/Druid/DruidDataSource DruidDataSource经过阿里巴巴数百个应用一年多生产环境运行验证,稳定可靠。 它最重要的特点是:监控、扩展和性能。 下载和Maven配置看这里: http</div> </li> <li><a href="/article/3581.htm" title="两种启动监听器ApplicationListener和ServletContextListener" target="_blank">两种启动监听器ApplicationListener和ServletContextListener</a> <span class="text-muted">spjich</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%A1%86%E6%9E%B6/1.htm">框架</a> <div>引言:有时候需要在项目初始化的时候进行一系列工作,比如初始化一个线程池,初始化配置文件,初始化缓存等等,这时候就需要用到启动监听器,下面分别介绍一下两种常用的项目启动监听器   ServletContextListener  特点: 依赖于sevlet容器,需要配置web.xml 使用方法: public class StartListener implements </div> </li> <li><a href="/article/3708.htm" title="JavaScript Rounding Methods of the Math object" target="_blank">JavaScript Rounding Methods of the Math object</a> <span class="text-muted">何不笑</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a> <div>    The next group of methods has to do with rounding decimal values into integers. Three methods — Math.ceil(),  Math.floor(), and  Math.round() — handle rounding in differen</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>