- 博客(64)
- 收藏
- 关注
原创 Web技术3:Cookie与Session
Session与CookieSession与Cookie的作用都是为了保持访问用户与后端服务器的交互状态。各有优点也各有缺点。Cokkie当一个用户通过HTTP访问一个服务器时,这个服务器会讲一些key/value键值对返回给客户端浏览器,并给这些数据加行一些限制条件,在条件符合时这个用户下次访问这个服务器时,数据又被完整地呆会给服务器。这样服务器就知道这次请求的一些特殊的信息了Cooki...
2018-09-30 12:00:43 281
原创 Web技术2:DNS域名解析
DNS域名解析过程当用户在浏览器中输入域名按下回车之后,比如,请求www.baidu.com。DNS解析大概有以下10个步骤1、浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长和太短...
2018-09-26 21:50:20 784
原创 Web技术1:http协议详解
Httphttp协议:Hyper Text Transfer Protocl,即插我文本传输协议,是用于万维网www服务器传输超文本到本地浏览器的传输协议。Http协议是基于TCP/IP协议来进行传递数据的主要特点Http协议是属于应用层的面向对象的协议,有着一下特点简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户...
2018-09-26 16:11:56 487
原创 Java 数据结构7:快速排序算法详解
快速排序快速排序是对冒泡排序的一种改进,采用分治策略,以减少排序过程中的比较次数。快速排序的平均运行时间是O(NlogN)。他的最坏庆幸性能为O(N2)。快速排序的思想就是分治递归,将原数组按照枢纽元分成左边小右边大的情况,在对分成的2个子数组在进行相同的操作,直至子数组中只有一个元素,这时,所有的数字都被成功排序。他的优先就在时间复杂度比较低。快速排序的基本思路第一趟排序,将数组按...
2018-09-25 21:49:24 425
原创 Java 数据结构6:插入,选择,冒泡排序算法
插入排序直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。private static void insertionSort(int[] array) { int j; for (int i = 0; i < array.length; i++) { int temp = ar...
2018-09-25 21:19:05 195
原创 Java 数据结构5:Hash详解
哈希表哈希表也称散列表(Hash),Hash表是基于健值对(key - value)直接进行访问的数据结构。但是他的底层是基于数组的,通过特定的哈希函数把key映射到数组的某个下标来加快查找速度,对于哈希表来说,查找元素的复杂度是O(1)我们来看一下HashMap里面的Hash函数是怎么实现的static final int hash(Object key) { int h;...
2018-09-25 14:29:11 357 1
原创 Java 数据结构4:二叉搜索树详解
二叉树什么是树,为什么使用树我们知道,对于数组,查找很快,有序的还可以通过二分法查找,但是插入数据却需要移动一些数据的位置。而链表的插入和删除很快,但是查找数据却需要从head开始遍历,那么有没有一种数据结构能同时具备数组查找快的优点以及链表插入和删除快的优点呢?有,就是树,Hello,树先生!树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。一棵树是一些节点的...
2018-09-18 20:03:16 293
原创 Java 数据结构3:队列及Queue源码详解
队列想栈一样,队列(queue)也是表。然而,使用队列时插入在一端进行而删除在另一端进行,遵循先进先出,后进后出原则,就像排队一样应用1、打印机队列2、还有之前线程里面讲到的,线程池的实现,有有界的和无界的阻塞队列Java中队列的实现其中ArrayBlockQueue的源码,在并发的时候已经介绍过了,可以参考https://blog.csdn.net/qq_2279...
2018-09-15 23:38:58 1619
原创 Java 数据结构2:栈及Stack源码详解
栈栈,相信大家都非常熟悉了,先进先出,后进后出,又叫做LIFO(先进先出)表,一般栈的模型是,存在某个元素位于栈顶,而该元素是唯一的可见元素栈的实现方式1、通过单链表,通过在表的顶端插入实现朴实,通过删除表顶端元素实现pop,top操作知识考察表顶端元素并返回他的值。2、数组实现,就常规push,pop最后的元素,没什么特别的Java中是怎么实现的栈来看一下Stac...
2018-09-13 20:36:32 212
原创 Java 数据结构1:数组及ArrayList源码详解
数组和链表数组的实现使得printList以线性时间执行,但是findKth操作花费常熟时间,这是我们众所周知的。但是插入和删除操作的花费却有着很大的开销,这主要看插入或者删除的位置,如果是在位置0上插入,则需要将整个表都后移一位,最坏的情况是O(N)。链表的出现解决了数组中插入和删除的开销,链表由一系列节点组成,每一个节点均包含表元素和到包含该元素后继元的节点的链,我们称之为next链,...
2018-09-12 21:19:32 358
原创 LdapTemplate对AD域进行查询1000条记录限制,实测有效!
公司的一个项目要从AD上取数据,但是用SpringLdap获取所有用户的时候会默认显示1000条数据,ldapTemplate.search(query().base("OU=xxxx,DC=xxxx").where("objectclass").is("person"), new AdUSerAttributeMapper());原因其实是windows AD域控做的默认限制而已,尝...
2018-09-12 14:53:42 3597
原创 Java设计模式23:访问者模式(Visitor)
访问者模式意图表示一个作用于某对象结构中的各元素的操作。他使你可以在不改变各元素的类的前提下定义中作用于这些元素的新操作适用性1、一个对象结构包含很多类操作,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。2、需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作污染这些对象的类。3、定义对象结构的类很少改变,但经常需要在此结...
2018-09-10 21:42:46 191
原创 Java设计模式22:模版方法模式(TemplateMethod)
模版方法意图定义一个操作中的算法骨干,而将一些步骤延迟加载到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。换句话讲,就是某些事情可以抽象成一系列方法的顺序执行,有些方法是公用的,有些特殊的可以改变某一个方法的实现(重写),就可以了适用性1、对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法和父类具体方法,而...
2018-09-10 20:44:05 205
原创 Java设计模式21:策略模式(Strategy)
策略模式意图定义一系列算法,把他们一个个封装,并且使得算法可独立于他的客户而变化适用性1、许多相关的类仅仅是行为有异,策略模式提供了一种用多个行为中的一个行为来配置一个类的方法2、需要使用一个算法的不同编特3、算法使用客户不应该知道的数据,可食用策略模式避免暴露复杂的,与算法相关的数据结构4、一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式...
2018-09-10 20:11:18 191
原创 Java设计模式20:状态模式(State)
State意图允许一个对象在其内部状态改变时改变他的行为,对象看起来似乎修改了他的类适用性1、一个对象那个的行为取决于他的状态,并且它必须在运行时刻根据状态改变他的行为2、一个操作中含有庞大的多分支条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常,有多个操作包涵这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中,这使得...
2018-09-10 17:17:29 218
原创 Java设计模式19:观察者模式(Observer)
观察者模式意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并被自动更新适用性1、当一个抽象模型有两个方面,其中一个依赖另外一个2、当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对吸纳个有待改变3、当一个对象那个必须通知其他对象,而它又不能假定其他对象是谁,换言之,你不希望这些对象时紧密耦合的结构...
2018-09-06 21:25:39 197
原创 Java设计模式18:备忘录模式(Mementor)
备忘录模式意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以后可将该对象恢复到原先保存的状态。顾名思义,就是提供备忘功能。适用性1、必须保存一个对象在摸一时刻的状态,便于后续对他的恢复2、如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性结构Memento备忘录存储原发器对象的内部状态...
2018-09-06 19:37:20 245
原创 Java设计模式17:中介者模式(Mediator)
中介者模式意图用一个中介对象来封装一些列的对象交互。中介者是哥哥对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互适用性1、一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构婚恋且难以理解2、一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象3、定制一个分布在多个类中的行为,又不想生成太多子类温馨提示...
2018-09-05 21:27:00 247
原创 Java设计模式16:迭代器模式(Iterator)
迭代器模式意图提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示,其实这个我们就一直在使用List中的Iterator就是迭代器模式实现适用性1、访问一个聚合的对象的内容而又无绪暴露他的内部表示2、支持对聚合对象的多种遍历3、为遍历不同的聚合结构提供一个统一的接口结构Iterator迭代器定义访问和遍历元素的接口Con...
2018-09-04 21:36:51 201
原创 Java设计模式15:解释器模式(Interpreter)
解释器模式意图给定一个语言,定义他的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子动机目前计算机编程语言有好几百种,但有时候我们还是希望能用一些简单的语言来实现一些特定的操作,我们只要向计算机输入一个句子或文件,它就能够按照预先定义的文法规则来对句子或文件进行解释,从而实现相应的功能。例如当输入字符串表达式为“1 + 2 + 3 ”时,将输出计算结...
2018-09-04 19:13:52 173
原创 Java设计模式14:命令模式(Command)
Command意图将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作动机开发中,我们经常需要向某些对象发送请求,但是我们并不知道接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与请求接收者能够消除彼此之间的耦合,让对象之间的调用关系更加灵活,可以灵活地指定...
2018-09-04 16:33:44 218
原创 Java设计模式13:职责链模式(Chain Of Responsibility)
Chain of Responsibility意图十多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止动机来看一个某公司请假的流程,按照请假天数,如果不大于1天,可有mentor审批,大于1天不大于2天,由leader审批,大于2天不大于5天,有项目经理审批,若大于5天需有CTO审批,...
2018-09-04 14:42:17 182
原创 Java设计模式12:代理模式(Proxy)
代理模式(Proxy)意图为其他对象提供一种代理以控制对这个对象的访问,可以简单理解为:在开发中,由于某些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称之为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式。适用性1、远程代理:为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,...
2018-08-31 14:49:13 199
原创 Java设计模式11: 享元模式(Flyweight)
享元模式(Flyweight)意图运用共享技术有效地支持大量细粒度的对象,核心思想就是共享,如果在一个系统中存在多个对象,那么只需要共享一份对象的copy,不需要每次使用都是用新的对象。适用性1、使用了大量对象的程序2、对象的大多数状态都可变为外部状态定义内部状态(IntrinsicState):在享元模式中可以共享的相同内容外部状态(Extrinsic...
2018-08-30 20:49:23 266
原创 Java设计模式10:外观模式(Facade)
外观模式(Facade)意图为子系统中的一组接口提供一个一致的界面,facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用适用性1、为一个复杂的子系统提供一个简单的接口2、客户程序与抽象类的实现部分之间存在着很大的依赖性,Facade模式将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性3、需要构建一个层次结构的子系统时,Fac...
2018-08-30 17:08:08 133
原创 Java设计模式9:装饰者模式(Decorator)
装饰着模式(Decorator)意图动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式相比生成子类更为灵活适用性1、在不影响其他对象的情况下,以动态、透明的方式给耽搁对昂添加职责2、处理那些可以撤销的职责3、当不能采用生成子类的方法进行扩充时,一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长,另一种...
2018-08-30 14:55:45 159
原创 Java设计模式8:组合模式(Composite)
组合模式(Composite)意图将对象组合成树形结构已表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性适用性1、你想表示对象的部分-整体层次i结构2、你希望用户忽略组合对象与单个休想的不同,用户将统一地使用组合结构中的所有对象结构典型的Composite对象结构Component为组合的对象声明接...
2018-08-29 21:34:32 2808
原创 Java设计模式7:桥接模式(Bridge)
桥接模式(Bridge)意图将抽象部分与他的实现部分分离,使他们可以独立地变化也可以理解为:实现系统可以从多个维度分类,桥接模式将各个维度抽象出来,各个维度独立变化,之后通过聚合,将各个维度组合起来,减少各维度的耦合适用性1、你不希望在抽象和他的实现部分有一个固定的绑定关系,例如,在程序运行时,你希望他的实现部分可以被选择或者切换2、类的抽象以及他的实现都应该可以通...
2018-08-29 15:08:49 165
原创 Java设计模式6:适配器模式(Adapter)
Adapter(适配器)模式意图将一个类的接口转换成客户希望的另一个借口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。也叫做包装器(Wrapper),可以理解为生活中的插座转换器。#适用性1、想使用一个已经存在的类,而他的接口不符合你的要求2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作3、想使用一些已经存在的子类...
2018-08-28 18:00:11 189
原创 Java设计模式5:单例模式(Singleton)
Singleton模式意图保证一个类仅有一个实例,并提供一个访问他的全局访问点How我们怎么保证一个类只有一个实例并且这个实例易于被访问呢?一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象。解决方案就是,我们可以让类本身负责他的唯一实例的访问保存,通过拦截创建实例的请求,判断是否有已经存在的实例,没有就创建实例,有则直接返回实例,这就是单例模式。适用...
2018-08-28 11:57:19 140
原创 Java设计模式4:原型模式(Prototype)
Prototype模式意图用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象适用性1、当一个系统应该独立于他的产品创建、构成和表示时2、当要实例化的类是在运行时刻指定的3、为了避免创建一个与产品类层次平行的工厂类层次时4、当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆他们可能比每次用合适的状态手工实例化要更方便一些结...
2018-08-27 21:58:06 140
原创 Java设计模式3:工厂方法模式(FactoryMethod)
Factory method(工厂方法)意图定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类适用性1、当一个类不知道它所必需创建的对象的类的时候2、当一个类希望由他的子类来制定它所创建的对象的时候3、当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候结构图...
2018-08-27 21:16:18 246
原创 Java设计模式2:建造者模式(Builder)
Builder模式意图讲一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。简单来说建造者模式适合于一个具有较多属性的对象的创建过程适用性1、当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时2、当构造过程必须允许被构造的对象有不同的表示时结构Builder为创建一个Product对象的各个部件制定抽象...
2018-08-27 16:53:45 265
原创 Java设计模式1:抽象工厂模式(Abstract Factory)
意图提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类适用性一下情况可以使用Abstract Factory模式一个系统要独立于它的产品的创建、组合和表示时一个系统要由多个产品系列中的一个来配置时当你要强调一系列相关的产品对象的设计以便进行联合使用时当你提供一个产品类库,而指向显示他们的接口而不是实现时`结构AbstractProdu...
2018-08-26 16:04:31 274
原创 为什么使用设计模式——设计模式
什么是设计模式Christopher Alexander说过:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样,你就能一次又一次地使用该方案而不必做重复劳动。这个思想同样适用于面向对象的设计模式,核心就在于提供给了相关问题的解决方案。一般而言,一个模式有4个基本要素1、模式名称(pattern name),它用一两个词来描述模式的问题,解决方案和效果。...
2018-08-26 13:50:16 1625 1
原创 字节跳动职位招聘要求
后台研发1、三年以上开发经验, 一年以上的Golang/Java/Python开发经验,具有较强的责任心, 自驱力和成长型思维; 2、具有良好的业务梳理和抽象能力, 掌握重构代码基本功; 4、熟练使用基本的数据结构和算法, 深入理解多线程、Socket等相关技术; 5、具备良好的编码习惯, 结构清晰, 命名规范, 逻辑性强, 代码冗余率低; 6、熟练掌握Golang/Java/Pyth...
2018-08-21 20:40:41 22896
原创 jvm系列(四)——jvm调优(命令行)
命令概述Sun JDK监控和故障处理命令有jps、jstat、jmap、jhat、jstack、jinfo{ "jps": JVM Process Status Tool,显示制定系统内所有的HotSpot虚拟机进程, "jstat": JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据, "jinfo":...
2018-08-21 16:36:06 905
原创 SpringBoot工程中导入本地自定义Jar包——通过Maven打包导包(超详细)
SpringBoot工程中导入本地自定义Jar包最近在项目中由于要使用一个之前写好的文件上传下载工程的服务,需要将原来的SpringBoot工程打成Jar包放到这次项目中使用。 网上找了一堆案例,最后一个成功的都没有,现在也没搞清楚那些为什么不行,最后请教了一些大佬,最后大家一起解决了问题,记录一下,方便其他需要的人使用首先原来的文件上传下载服务是用SpringBoot 写的,目...
2018-08-20 21:00:46 12320 1
原创 JVM系列(三)——Java类加载机制
Java类加载机制类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类的生命周期 如图,类加载的过程包括加...
2018-08-19 11:24:52 207
原创 JVM系列(二)——Java垃圾回收-GC
垃圾回收-GC垃圾回收: Garbage Collection, 简称“GC”,上一节我们知道在java虚拟机中中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的。后续谈到的内存分配回收也是指这一部分内存。对...
2018-08-16 21:29:23 166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人