自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阵雨的博客

never stop thinking

  • 博客(48)
  • 收藏
  • 关注

原创 并发编程知识点全面总结

目录为什么会出现锁锁的类型以及相关概念synchronized:synchronized的具体是怎么实现的呢?现在回到synchornized代码实现上Volatile:synchronized与Volatile的区别:Condition:Lock:synchronized与Lock的区别:AQS(AbstractQueuedSynchro...

2019-03-12 19:28:44 470

原创 11. Container With Most Water盛水最多的容器

给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能...

2020-02-06 22:36:34 190

原创 169. Majority Element求众数

题目给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3] 输出: 3示例2:输入: [2,2,1,1,1,2,2] 输出: 2第一时间想到了排序,因为排序后数字按顺序,直接可以比较是否相等,然后设置两个计数器,比大小,最后...

2019-11-22 21:40:36 255

原创 序列化机制

原理基于内存,通过IO流的方式,把对象转换为字节,然后通过tcp协议在网络中传输对象。序列化和反序列化的概念把对象转化为字节序列的过程称之为对象的序列化反之,称之为反序列化好的序列化协议有什么用?恰当的序列化协议不仅可以提高系统的通用性、强壮型、安全性、优化性能。同时还能让系统更加易于调试和扩展。比如dubbo协议天然的支持海量高并发,其本质就是 基于hessian...

2019-11-17 12:56:00 268

原创 三数之和 3Sum leetcode

leetcode 15.三数之和 3Sum第一步:判断问题类型,观察 信息之间关系,除了暴力求解,是否有稍微更好一点的解法,如果没有用最简单的方法进行暴力求解法测试中发现有重复问题,解决重复,发现排序才可以更好的解决重复。以此写出第一个代码class Solution { public List<List<Integer>> threeSu...

2019-11-06 22:53:19 539

原创 重新开始刷算法题的一些感想

最近又开始重新练习算法题,突然明白算法并不是一开始就要得 完美的解决方案,完美的答案只不过是通过不断思考和优化得到的最终结果,我们可以从最初的暴力求解开始,然后一步一步优化,打补丁。重要的是思考过程,因为他就像是钓鱼的技术,不管换什么鱼竿和地方,有技术都能钓到鱼。拿到问题后,先分析问题有什么特征,运用已有的知识是否能解决,已有的知识他就是经验,题做的多了经验就丰富,就不用每次都从暴力求解考试了...

2019-11-06 22:50:49 322

原创 互联网到底怎么连接的?一张图告诉你

参考内容:《网络是怎么连接的》...

2019-10-27 19:45:46 4553

原创 大型网站核心架构要素

目录大型网站核心架构要素1.性能2.可用性3.伸缩性4.扩展性5.安全性大型网站核心架构要素软件架构需要关注的架构要素:性能、可用性、伸缩性、扩展性、安全性1.性能可优化性能的环节:浏览器端:浏览器缓存、使用页面压缩、合理布局页面、减少Cookie传输等 CDN,将静态内容存储在离用户最近的网络服务商机房,部署方向代理服务器,缓存热点文件,加...

2019-10-26 18:39:11 1404

原创 DNS是什么?工作原理、工作流程总结

目录HTTP网络请求过程:DNS处于请求的哪个位置呢?DNS基本工作:具体如何查找呢?总结域名解析过程:HTTP网络请求过程:1.域名解析2.TCP三次握手3.tcp连接后发出Http请求4.服务器响应Http请求5.浏览器解析,并请求相对应资源6.渲染页面DNS处于请求的哪个位置呢?他在过程中是 第一步 域名解析如下图,在解析域名...

2019-10-20 16:32:41 3128

原创 初识哈希表

目录是什么:散列表功能:什么是散列冲突:解决散列冲突的方法:哈希表的性能:插播阿里面试题:是什么:散列表又名哈希表、hash表Java中对应的数据结构有hashmapPython中对应的数据结构叫做 字典它是一种基于数组,借助散列函数进行扩展的数据结构,它利用数组支持下标随机访问的特性,使得我们寻找元素时,利用映射就可以知道元素的位置,查找的时间复杂度为...

2019-10-08 22:55:20 138

原创 可达性分析算法

what可达性分析算法是用来判断对象是否存活的方法,与之相同的算法还有引用计数法。Java、C#使用的是可达性分析算法,在一些脚本语言中会使用引用计数法,例如:Python,Squirrel。引用计数法:原理:有一个地方引用对象,则此对象计数器 +1,引用失效则-1,计数器为0则不能使用优缺点:判断效率高,实现简单,但是难以解决对象互相循环引用问题。可达性分析...

2019-10-02 21:10:57 3033

原创 设计模式之责任链模式

目录概念:优点:缺点:案例应用:UML图代码:本文参考:《大话设计模式》——程杰责任链模式 ChainOfResponsibility概念:使多个请求都机会能处理请求,减少 请求发送者 与 接受者 的耦合。处理请求的对象连成一条链并传递请求,直到有一个对象处理它为止。优点:降低耦合随时增加或者修改请求增强对象指派责任的灵活性...

2019-08-26 19:19:16 98

原创 设计模式之装饰模式

装饰模式理解:为原有的功能,动态的添加新功能,修饰原有的核心功能和行为。本质还是提纯原类,将核心不变的功能和修饰的东西分开,简化原有类。举例:qq秀穿衣服,实际上人穿衣服,人是不变的,接着是衣服类别是不同的,装饰功能却是不变的,当需要修饰时,就调用修饰功能修饰包装原来的核心。代码展示...

2019-07-02 10:04:40 93

原创 面向对象原则

单一职责原则概念:一个类引起他变化的原因就一个优点:易维护、易扩展、易复用、灵活多样缺点:如果一个类承担的职责过多,就相当于把这些功能耦合在一起,一个功能的变化可能会削弱或抑制这个类完成其他职责的能力。开放-封闭原则概念:对于开放是扩展的,对于更改是封闭的面对需求时,对程序的改动是通过添加新代码,而不是改变现有代码举例:如对 计算程序,需要添加减法时,不是改变类,...

2019-07-02 09:21:15 89

原创 Volatile与synchronized详解

文章目录:1.简单理解Volatile和synchronized2.Volatile详解3.synchronized详解4.Volatile与synchronized的区别与联系1.简单理解Volatile和synchronized:synchronized:当被synchronized修饰时,synchronized会锁定当前变量,只有当前线程能够访问该变量,其他线程会被...

2019-06-18 14:19:56 840

原创 圆圈中最后剩下的数字——剑指offer(Java)

/*题目 * 圆圈中最后剩下的数字 (约瑟夫环) * */ /*思路 * 不管第几个 圆圈内都是循环的,求余数就可以 * 注意要点 每次删除一个数,要从删除的下一个数开始 * 所以核心公式 bt + m - 1,以为数次 从0开始 故m-1, * 从删除数下一个 就是bt的位置 ,因为环里删除一个数, ...

2019-03-20 11:33:15 293

原创 设计模式

单例模式:保证一个类只有一个实例,并提供一个访问他的全局访问点工厂模式:定义一个用于创建对象的接口,让子类去决定实例化哪一个类,Factory Method使一个类的实例化延迟到子类适配器模式:将一个类的接口转换成客户希望的另一个接口,是的原本由于接口不兼容而不能一起工作的那些类可以一起工作。碰到无法改变原有设计和代码的情况可以考虑装饰者模式:动态的给一个对象增加一些额外的职责,生...

2019-03-15 10:38:46 102

原创 二进制中1的个数——剑指offer(Java)

/*题目 *输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 * *//*思路 * * (n-1) &amp; n 操作会使 末尾变0 * 5 =》 101 4 =》 100 101 &amp; 100 = 100; 如果有1继续再来 知道a=0; * * 概念: 1 &amp; 1 = 1 1 &amp; 0 = 0 * */ ...

2019-02-26 18:02:18 188

原创 二维数组中查找目标值——剑指offer(Java)

/*题目* 在一个二维数组中,每一行从左到右递增,每一列从上到下递增* 输入一个二维数组和目标值,判断数组是否含有该目标值* *//* 分析 * 到右下角都是递增的,所以选一行列的最大值开始查找,即右上或者左下 * 因为是递增,所以判断比原来元素大还是小,直接移动 * 在一列看,只要比他小就上移动,因为最左边一列就是本行最小值,小了就直接排除,进入下一行 * 一旦一个数比左下角...

2019-02-26 16:20:47 677

原创 字符流中第一个不重复的数字——剑指offer(Java)

/*题目 * 请实现一个函数用来找出字符流中第一个只出现一次的字符 * *//*思路 * * 巧用 字符数组解决问题, ch[c]++ ,用来标记出现的次数, 等于1的时候只出现一次 * */  char[] chars = new char[256]; StringBuilder sb = new StringBuilder(); public c...

2019-02-26 01:59:53 146

原创 表示数值的字符串——剑指offer(Java)

/*题目 *请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 * * *//*思路 *例如,字符串 “+100”、”5e2”、”-123”、”3.1415” 以及 “-1E-16” 都表示数值, * 但”12e”、”1a3.14”、”1.2.3”、”+-5” 以及 “12e+5.4” 都不是 * 具体思路见代码注释 * */  public boolean...

2019-02-26 01:57:48 281

原创 字符串转为整数——剑指offer(Java)

/*题目 * 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数 * (数值为0或者字符串不是一个合法的数值则返回0)。 * *//*思路 * "-4c+4\@ AD " * 注意以上字符, 字符0 对应48 9对应57,完美的将数字剔除出来  1.只有第一位可以是符号位  2.其他为只能为数字 48&lt;x&lt;57  3.最后将字符累加 *...

2019-02-25 21:30:29 203

原创 第一个出现一次的字符——剑指offer(Java)

/*题目 *在一个字符串中找到第一个只出现一次的字符。如输入acbacd,则输出b。 * * *//*思路 * 要想找到这一个字母 必须全部遍历还要记录次数 * 双层循环可以解决,但是时间复杂度为 o(n^2) * 利用hash结构,空间换时间,存储字母出现的次数, 时间复杂度变为,o(n) * 知识点: linkedhashMap 输入与输出位置一只 比hashMap...

2019-02-24 16:26:44 145

原创 替换字符串中的空格——剑指offer(Java)

/*题目* 将一个字符串中的空格替换为 "%20"* *//*思路与注意点* 1.循环比较字符串单个字母,空格追加“%20”,否则追加字母* 2.在组成新的字符串的过程中,大量字符串组成String效率太低,采用StringBuilder,StringBuffer* 易出错:str.chart(i)并不能equals,需要转换成字符串* */ public static S...

2019-02-24 12:23:59 416

原创 反转字符串——剑指offer(Java)

/*题目 * 翻转字符串,字符串中的单词不翻转,单词以空格隔开 * I love you =&gt; you love I *//*思路 * 先反转整个字符串,再将单词反转 * 易混淆知识点:length为数组方法,length()为String方法 * */ public String ReverseSentence(String str){ i...

2019-02-24 11:43:11 431

原创 判断二叉树A是否包含子树B——剑指offer(Java)

/*题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)** *//*思路** 先从根节点开始判断,* 1.如果根节点相同,则从头遍历* 2.如果根不同,则从左右两个遍历,任意一个含有B树都可以,如果失败则递归* doesTree1HasTree2函数负责递归两个遍历两个树,直到B树为空则返回true其余都是false** */...

2019-02-23 21:35:13 1580 2

原创 数组中只出现一次的数字——剑指offer(Java)

/*题目 *一个整型数组里除了两个数字之外,其他的数字都出现了两次,请找到这两个只出现一次的数字 * *///知识点温习:两个相同的数异或 为 0,异或满足交换律和结合律/*思路 * 时间复杂度o(n) 空间复杂度o(1) * 将数组所有的数异或,最终只剩两个不相同的数异或结果,其余数被抵消, * 然后找出这个异或数 中的 位数为1的那一位,因为异或必定在此位上结果不同,为1或...

2019-02-21 15:16:03 88

原创 滑动窗口的最大值——剑指offer(Java)

/*题目*给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,* 那么一共存在6个滑动窗口:{[2,3,4],2,6,2,5,1},* {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,...

2019-02-21 10:54:38 167

原创 用两个栈实现队列

/*题目*用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。* *//*思路* 这个题目其实算是一道简单题,只要有数据结构理论的,完全可以理解整个过程,其核心思想就是两个栈,* 一个用来push原始进入,类似仓库的功能,仓库的元素按照栈的规则存放入货架,再从货架pop元素就可以了, 栈 先进后出 队列 先进先出* 注意点: 一定要 stack...

2019-02-20 13:04:34 100

原创 从尾到头打印链表——剑指offer(Java)

/*题目* 输入一个链表,从尾到头打印链表的每一个节点值** *//*思路* 借助栈实现,或使用递归* 栈具有先进后出,可以从尾到头** */ class ListNode{ int val; ListNode next=null; public ListNode(){ } public Li...

2019-02-18 13:24:47 89

原创 二叉搜索树转换双向链表——剑指offer(Java)

/*题目 * 二叉搜索树转换为双向链表 * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。 * 要求不能创建任何新的结点,只能调整树中结点指针的指向。 * 比如输入下图中左边儿二搜索树,则输出转换后的排序双向链表。 * 4 / \ 2 5 / \ / \ 1 3 5 7 4=6=8=10=12=14=16 * *//*思路...

2019-02-18 12:01:02 2047

原创 删除链表中重复的节点——剑指offer(Java)

/*题目 * 在一个排序的链表中,存在着重复的节点,请删除该链表中重复的节点,重复的节点不保留,返回链表头指针 * 1 -》 2 -》 2 -》 3 -》 3 -》 4 -》 5 * 删除后 1 -》 4 -》 5 * *//*思路 * 遍历节点的同时判断当前节点与下一个节点是否相同,如果相同则删除, * 删除方法 使用相同节点的前一个节点,指向相同节点的下一个节点如图 *...

2019-02-17 19:38:55 2894 3

原创 找出两个链表的第一个公共节点——剑指offer(Java)

/*题目 * 输入两个链表,找出他们的第一个公共节点 * *//*思路 * 1.使用哈希表,将一个链表储存进去,再遍历另一个链表,与哈希表对比 * 2.求出两个链表的长度,然后长的链表把多出节点个数先走掉,两个链表在同时开始走 * 时间复杂度为 O(m + n),空间复杂度为O(1) *  * 下面这个编码就是这个原理,但是代码较难理解,看图示 一步一步就理解了 * ...

2019-02-17 18:00:22 574

原创 链表中环的入口节点——剑指offer(Java)

/*题目 * 链表中包含环,请找出该链表的环的入口节点 * *//*思路 * 1.使用哈希表,但是空间复杂度为O(n) * 2.使用快慢指针,slow 一次走一步,fast一次走两步,当两个相遇时,fast指针再重新指向head * 此时fast一次走一步,slow一次走一步,再次相遇则为入口 * */方法2的数学原理,见以下链接,讲的比较详细。https://blog....

2019-02-16 21:50:33 264

原创 复杂链表的复制——剑指offer(java)

/*题目 *输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点), * 返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) * *//*思路 * 1.利用哈希表辅助空间 2.不用辅助空间,相当于边遍历链表,边把链表复制。 * */其实链表的题目大多数是可以不通过...

2019-02-16 18:19:02 125

原创 O(1)时间删除链表节点——剑指offer(Java)

题目:    在O(1)时间内删除链表节点 思路:    /*如果题目要求为O(n)则遍历就可以    *   但是题目要求是O(1)所以只能一次查询就完成    *   直接将后一个元素的值赋予前一个,改变指针时间复杂度就为1    *   但是如果删除元素为末尾就是O(n)    *   我们知道要删除的节点是谁就知道下一个节点,所以    *   1.将下一个节点的数据赋...

2019-02-16 17:24:42 190

原创 认识回溯算法

目录 原理相似算法实现提高效率的技巧使用场景经典回溯算法案例原理回溯算法思想有点像时空穿越,就是每次面对选择时从一组可能的解中,选择一个满足要求的解,如果当你发现选错了的时候,就穿越时空回到上一个时间点重新选择。回溯算法本质上就是枚举,枚举所有的解,找到符合的解。 相似算法贪心算法:每次面对选择的时候做出最优的选择,这样一直选下去,使得最终解为最...

2019-02-12 16:08:15 334

原创 实习生、应届生、三方协议、实习协议、劳动合同的区别

一.应届生与实习生的区别应届生——毕业的最后一年,而校园招聘会招聘的就是应届生,通常来的都是有实力的企业,通过网申、笔试、技术面试、hr面试等,你大概率就算是企业的人了,只要最后考核过了就算正式员工了,整个流程因企业不同,至少会有技术面试和hr面试。拿到校招的offer就相当于拿到初步的劳动合同书了。实习生——在整个没有毕业期间,去企业都算实习生,有的企业最近项目较紧张,招聘实习生来...

2018-09-23 08:32:07 20914

原创 this与super的区别一张图片搞清楚

 类成员与实例成员的区别一张图片搞清楚抽象类和接口的区别一张图片解决

2018-09-04 15:46:50 345

原创 类成员与实例成员的区别一张图片搞清楚

this与super的区别一张图片搞清楚抽象类和接口的区别一张图片解决 

2018-09-04 15:44:25 2955

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除