因为我们还需要判断a和b是否为空,这里有一个简化代码的优化,就是在a和b两个数组当中插入一个极大值作为“标兵”。 这个标兵设置成正无穷大的数,这样当a数组当中其他元素都弹出之后。...一分为二之后,我们化零为整,把其中的一个部分看成是整体,再使用同样的方法继续一分为二。这样一直拆分下去,直到最后拆分之后的数组只剩下一个元素,由于单个元素的数组是天然有序的。...比如在这段代码当中merge_sort函数可以完成一个数组的排序,虽然这个函数是我们编写的,但是我们可以先假设它已经开发好了,可以实现排序了。...将小于它的放到它的左侧,大于它的放到它的右侧。这么一个操作结束之后,可以肯定的是,对于我们选定的标杆来说,它所在的位置就是排序之后它应该在的位置。...这两个算法并不难,我想学过算法和数据结构的同学应该都有印象,但是在实际面试当中,真正能把代码写出来并且没有明显bug的实在是不多。我想,不论之前是否已经学会了,回顾一下都是很有必要的吧。
这里有一个简化代码的优化,就是在a和b两个数组当中插入一个”标兵“,这个标兵设置成正无穷大的数,这样当a数组当中其他元素都弹出之后。...其实很简单,这也是归并排序的精髓。 我们每次将一个数组一分为二,显然,这个划分出来的数组不一定是有序的。但如果我们继续切分呢?直到数组当中只有一个元素的时候,是不是就天然有序了呢?...将小于它的放到它的左侧,大于它的放到它的右侧。这么一个操作结束之后,可以肯定的是,这个标杆所在的位置就是排序完成之后,它应该在的位置。...层,每一层的复杂度总和是n,所以整体的复杂度是 ? 。 当然对于快速排序算法来说,如果数组是倒序的,我们默认取最后一个元素作为标杆的话,我们是无法切分数组的,因为除它之外所有的元素都比它大。...这两个算法并不难,我想学过算法和数据结构的同学应该都有印象,但是在实际面试当中,真正能把代码写出来并且没有明显bug的实在是不多。我想,不论之前是否已经学会了,回顾一下都是很有必要的吧。
堆内存的作用很方便记忆,它的唯一目的就是存放对象实例。成员变量的变量值无论是基本类型、还是引用类型都存储在堆内存中,而局部变量的变量值如果是引用类型则存储在堆内存中。这点下文南哥会继续讲到。...成员变量变量名作为类的一部分,其结构定义存储在方法区。而变量值无论是基本数据类型还是引用类型,都是存储在堆内存中的对象实例内。类变量变量名作为类的一部分,其结构定义也存储在方法区。...而变量值如果是基本数据类型,存储在虚拟机栈的栈帧中;如果是引用类型,变量值存储在栈中,但引用所指向的对象本身存储在堆内存中。2. 垃圾回收器2.1 引用计数法面试官:JVM为什么不采用引用计数法?...虽然永久代的垃圾回收效率是比较低的,但永久代里的废弃常量和无用的类仍然会被回收。例如创建一个字符串常量name,该字符串会存在于常量池中。...这样就只浪费了其中一块Survivor空间的内存。我是南哥,南就南在Get到你的点赞点赞点赞。看了就赞,Java进阶一大半。点赞 | 收藏 | 关注,各位的支持就是我创作的最大动力❤️
在Django社区,不同开发者对此有不同想法。一些开发者认为应该将所有模板都放在所在应用中。另一部分开发者将项目的所有模板放到一个单独的目录。我就是这第二种开发者。...模板实战 当使用模板时,我们把上下文数据插入到模板里各个占位符的位置。 模板变量是使用上下文填充占位符最常见的形式。上节中我们展示了一个使用name变量的例子。...除了我们已经讲过的标签外,其中最常用的一个内置标签就是url标签。回忆那篇关于URLs的文章,通过reverse函数你可以将URL与一个命名视图联系起来。如果你想模板中用URL怎么办?...date过滤器的文档中演示了在修改时间格式时可用的选项有哪些。 ? 如果a_datetime是一个4月愚人节的实例,然后它会返回像2020-04-01的字符串。...现在,如果我们有一个message变量,我们可以给它提供一些pizzazz。为了用这个定制的过滤器,我们必须用load标签把我们的标签模板加载到模板。 ?
我要了解其中的的一级域名、二级域名即可。如下图: [在这里插入图片描述] (图片来源于网络) 那网址参数是上面网址的哪一部分呢?思考一下,再继续往下看。...在这里插入图片描述] CSS 简介 CSS 指层叠样式表(Cascading Style Sheets):它定义了一个网页该如何显示里面的元素,比 如这个段落该靠在浏览器的左边还是右边还是 中间,这段文字的字体...5.2 爬虫 爬虫的基本流程 为了让你有更好的体验,我把字转换成一张图片给你演示看下图: [在这里插入图片描述] 什么是 Request 和 Response?...BeautifulSoup BeautifulSoup 对象表示的是一个文档的全部内容。大部分时候,可以把它当作 Tag 对象,它支持遍历文档树和搜索文档树中描述的大部分的方法。...看做 return 之后再把它看做一个是生成器(generator)的一部分(带 yield 的函数才是真正的迭代器)。好了,如果你对这些不明白的话,那先把 yield 看做 return。
由于做这种分析有点费时,我不想每次把帖子呈现给页面时重复这项工作。我要做的是在提交时为帖子设置源语言。检测到的语言将被存储在post表中。...将其中一个Key复制到剪贴板,然后将其设置到终端的环境变量中(如果使用的是Microsoft Windows,请用set替换export): (venv) $ export MS_TRANSLATOR_KEY...如果状态码是200,那么响应的主体就有一个带有翻译的JSON编码字符串,所以我需要做的就是使用Python标准库中的json.loads()函数将JSON解码为我可以使用的Python字符串。...现在每条用户动态都有一个唯一的标识符,给定一个ID值,我可以使用jQuery定位元素并提取其中的文本。...#是jQuery使用的“选择器”语法的一部分,这意味着接下来是元素的ID 我也希望有一个地方可以在我从服务器收到翻译文本后插入翻译文本。
9.9.4 快速排序优化 刚才讲的快速排序还是有不少可以改进的地方,我们来看一些优化的方案。...但注意,我刚才说的是“如果……是中间”,那么假如我们选取的pivotkey不是中间数如何呢?...三数取中对小数组来说有很大的概率选择到一个比较好的pivotkey,但是对于非常大的待排序的序列来说还是不足以保证能够选择出一个好的pivotkey,因此还有个办法是所谓九数取中(median-of-nine...刚才我谈到了对于非常大的数组的解决办法。那么相反的情况,如果数组非常小,其实快速排序反而不如直接插入排序来得更好(直接插入是简单排序中性能最好)。...其原因在于快速排序用到了递归操作,在大量数据排序时,这点性能影响相对于它的整体算法优势而言是可以忽略的,但如果数组只有几个记录需要排序时,这就成了一个大炮打蚊子的大问题。
堆内存的作用很方便记忆,它的唯一目的就是存放对象实例。成员变量的变量值无论是基本类型、还是引用类型都存储在堆内存中,而局部变量的变量值如果是引用类型则存储在堆内存中。这点下文南哥会继续讲到。...新生代、老年代又使用了不同的垃圾回收算法,如新生代的对象特点就是存活时间短,更适合把内存一分为二的复制算法;而老年代的对象存活时间就相对较长了,各种大对象、小对象也比较复杂,可以使用标记清除算法、标记整理算法...如果 Java 虚拟机堆栈可以动态扩展,并且尝试扩展但没有足够的内存来实现扩展,或者没有足够的内存来为新线程创建新的初始 Java 虚拟机堆栈,则 Java 虚拟机将抛出OutOfMemoryError...成员变量 变量名作为类的一部分,其结构定义存储在方法区。 而变量值无论是基本数据类型还是引用类型,都是存储在堆内存中的对象实例内。 类变量 变量名作为类的一部分,其结构定义也存储在方法区。...而变量值如果是基本数据类型,存储在虚拟机栈的栈帧中;如果是引用类型,变量值存储在栈中,但引用所指向的对象本身存储在堆内存中。
节点类型有十多种,但其中我们最需要了解的有3种: 元素节点的nodeType属性值是1 属性节点的nodeType属性值是2 文本节点的nodeType属性值是3 这就意味着我们可以只对特定类型的节点进行处理...3.4.1 传统方法 document.write()方法可以方便快捷的把字符串插入到文档中 innerHTML属性可以用来读写html的内容 3.4.2 DOM操作法 如果想把一段文本内容放到p元素中...appendChild,想把新创建的节点插入节点树的最简单办法之一,让它成为某个节点的一个子节点。 insertBefore,这个方法可以在已有元素前插入一个新元素。...: a.首先,这个函数有两个参数,一个是将被插入的元素,一个是目标元素。...b.把目标元素的父元素保存到变量parent里 c.检查目标元素是不是父元素parent的最后一个子元素 d.如果是,就用appendChild方法把新元素追加到父元素parent上,这样新元素就恰好被插入到目标元素之后
不同于AntPathMatcher的纯字符串操作,这里把每一段都使用对象来描述,结构化的表示使得可读性更强、更具灵活性,甚至可以获得更好的性能表现。.../**能匹配成功,但无法获取到动态成功匹配元素的值 /{*pathVariable}可认为是/**的加强版:可以获取到这部分动态匹配成功的值 正所谓一代更比一代强嘛,如是而已。...禁用中间**语法支持 在上篇文章对AntPathMatcher的详细分析文章中,我们知道是可以把/**放在整个URL中间用来匹配的,如: @Test public void test4() {...说明:由于这类URL的解析绝大多数情况下匹配一次(执行一次)就行,所以微小的性能差异是无所谓的(对API来讲收益较大) 可能有小伙伴会说:在Service层,甚至Dao层我也可以正常使用PathPattern...举个生活上的例子:马桶可以装在卫生间,也可以安装在卧室的床旁边,都能完成大小便功能,但你觉得这么做合适吗? Java这门语言对访问权限的控制设计得还是很优秀的,很多隔离性的问题在编译器就能搞定。
有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中间任意抽出。...后进者先出,先进者后出,这就是典型的“栈”结构。 从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。 如何实现一个“栈”?...栈主要包含两个操作,入栈和出栈,也就是在栈顶插入一个数据和从栈顶删除一个数据。理解了栈的定义之后,我们来看一看如何用代码实现一个栈。 实际上,栈既可以用数组来实现,也可以用链表来实现。...在入栈和出栈过程中,只需要一两个临时变量存储空间,所以空间复杂度是 O(1)。 注意,这里存储数据需要一个大小为 n 的数组,并不是说空间复杂度就是 O(n)。因为,这 n 个空间是必须的,无法省掉。...不管是顺序栈还是链式栈,入栈、出栈只涉及栈顶个别数据的操作,所以时间复杂度都是 O(1)。 支持动态扩容的顺序栈 如果要实现一个支持动态扩容的栈,我们只需要底层依赖一个支持动态扩容的数组就可以了。
文字世界 所以可以证实观点: 在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。可以在后面接上特殊字符,例如空格等分开。...3.双引号里插入变量如果不想用空格可用大括号替代。 这个就很容易理解了,如上方的用空格隔开变量和字符,但是如果不想有空格但是还要解析变量,你可以使用大括号:{} 把变量括起来即可! 可以明白: \n在牛牛后面它给了一个回车换行的效果 \t在羊羊后面给了几个空格的效果,也就是鼠标按tab键的效果 我们将双引号改为单引号看看会怎么样: 如果按照上述代码来写,会报错,报错提示为: 因为字符串:“abc"def”必须写在双引号中间。而双引号中间还有一个双引号。 也就是意味着字符串声明提前结束了,在“c”处结束了。...同理可推,单引号当中要插入一个单引号显示出来的时候,也可以在单引号声明的字符串中的单引号前面加上(反斜线,转义字符),将单引号的意义(限定字符区间)去掉。 <?
如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成...它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 3.1 算法描述 一般来说,插入排序都采用in-place在数组上实现。...具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序)大于新元素,将该元素移到下一位置; 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置...既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版)》的合著者Robert Sedgewick提出的。 ...假如待排数据可以分为d个关键字,则基数排序的时间复杂度将是O(d*2n) ,当然d要远远小于n,因此基本上还是线性级别的。 基数排序的空间复杂度为O(n+k),其中k为桶的数量。
相比之前的 URL 替换,这个方案完美太多 —— URL 是动态创建的非常普遍,但 location 不是明文出现的,及其罕见。...为了避免这种情况,我们仍需替换页面里的 HTTPS URL,让中间人能掌控更多的资源。 ? 要替换 URL 倒也不难,一个简单的正则就能实现 —— 但既然使用正则,我们面对的只能是字符串了。...我们很难得知匹配到的是独立的字符,还是一个宽字符的部分字节。因此,我们还是得用传统可靠的方式来处理字符串。...如今这个脚本泛滥的时代,动态加载模块是很常见的事。如果引入的是一个 HTTPS 的脚本,那么我们的中间人又无从下手了。 不过值得庆幸的是,模块拦截不像 location 那样无法实现。...…… 所以,只要发挥无尽的想象,实现一个工程化的通用劫持方案,依然是可行的。 防范措施 如果你是仔细看完本文的话,应该早就想到如何应对了。
cURL中文翻译过来叫做基于URL的函数库。它的主要功能是:使用相关的函数模拟协议请求。...> 上面这段代码是,我们曾经说过双引号能够解析变量,有一个问题: 效率没有纯单引号的高 那么问题1:我想改为效率最高的方式应该怎么办? 问题2:我有多个字符串,要拼接在一声怎么办?...并且为了防止有人盗版,我还可以把version.php的代码进行了加密。 我们有两个文件: 1.一个文件中间有版本号,版本声明和授权声明。...我在 shu前再加上一个$(美元符号),可以理解成为以下的变形过程: $$shu ${$shu} 分成两块来看 ${'biao'} 把变量$shu解释成了biao $biao 而$biao也是一个变量对应的值是...可以这样理解,get传值在url中可见,而post传值在url中不可见。 而post传值在url中不可见,是通过浏览器的header头部份将数据发送给指定服务器的。
换句话说,一个类的边界和职责应当是十分狭窄且集中的。我很喜欢的一句话"在类的职责问题上,无知是福"。一个类应当做它该做的事,并且不应当被它的任何依赖的变化所影响。...,对固定参数+附加参数进行数字签名,使用的是md5加密,比如:我想通过标题获取一个信息,在客户端使用 信息标题+日期+双方约定好的一个key通过md5加密生成一个签名(sign),然后作为参数传递到服务器端...十七、双引号和单引号的区别 双引号解释变量,单引号不解释变量 双引号里插入单引号,其中单引号里如果有变量的话,变量解释 双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来...* echo 输出一个或多个字符串,中间以逗号隔开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用 * print也是php的一个关键字,有返回值 只能打印出简单类型变量的值(如...int,string),如果字符串显示成功则返回true,否则返回false * print_r 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,但print_r
大家好,又见面了,我是你们的朋友全栈君。 在这篇文章中,我尽量用最浅显易懂的语言来说明使用 PHP, MySQL 制作一个动态网站的基本技术。...这里的 SQL 语句的含义是向叫做 table_name 的表中插入一行,其中把 colume# 字段的值相应地设置为 value#。...这里,我们把它赋给了 到这里你应该问一个问题:如果满足 WHERE 子句条件的有不止一行的话怎么办?要解答这个问题,需要稍微细致的讲解一下 row 这个事儿。...它的用法参考例子就可以了。 关于符号 . 的用法,它的作用是连接字符串(和变量),往往和 echo 配合使用,用法参考示例。...这里我并没有强调 GET 方法的数值是“透明”的:虽然 POST 方法的数值不会显示在 URL 中,但是它还是会通过 HTTP Header 发送到服务器,用许多插件和小工具都可以查看 HTTP Header
我们目前比较熟悉的分治算法好像只有归并排序和快速排序这两个,我们可以试着把这两个算法往这个问题上套。归并排序核心思路是每次将数组一分为二,然后通过这两个数组归并的过程找到我们想要的解法。...如果它小于K,说明这个标杆取小了,我们应该在它右侧的数组当中重新选择一个标杆。如果它大于K说明这个标杆取大了,我们可以直接忽略它右侧的元素,因为它右侧的元素一定不在答案里。...这是因为我们每次迭代的过程中,数组都会被舍弃一部分,我们把完整的搜索树画出来大概是下面这个样子。 ? 可以看到,虽然总的迭代次数还是次,但是每一层当中遍历的元素个数不再是n。...一个比较简单的思路是我们可以选择首尾和中间三个位置的元素,然后选择其中第二大的元素作为标杆。...所以最坏的情况选出来的x是70%位置的数。 最后,我们来分析一下它的复杂度,我们可以得到一个不等式: 其中是寻找个中位数的复杂度,是递归的最坏的情况,即只能减少30%数组的长度。
nginx使用“$”符号作为前缀来表示一个变量,并且它还有一个其它语言没有的特性:变量可以直接插入到一个字符串中,插入后并不会改变变量的特性,并且对插入变量的个数没有限制。...现在不确定的应该是访问第一个location的时候应该出现什么结果,如果变量“$a”是一个全局变量,那很显然它的值应该也是“b”。但它不是全局变量,那应该是什么值呢?.../b /b 可以看到结果跟预期一致。 在同一个请求中nginx的变量是有全局性的,但仅限于当前请求中。...其它 nginx中变量类型比较单调,不像其它真正编程语言那样有各种类型。nginx中的变量不管是内置变量还是自定义变量,几乎都是字符型的。...在整篇文章举例说明问题的时候,关于变量的使用,我都是用双引号括起来的,这并不表示必须使用双引号,单引号或不用引号都是可以的,只有在不加引号就无法表示某个字符串是一个整体的时候加引号才是必须的,比如字符串
领取专属 10元无门槛券
手把手带您无忧上云