- 博客(171)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 状压DP深入练习
1、HDU God of War题意:给定吕布攻击力、防御力、生命,给定n个敌人的攻击力、防御力、生命值、可得经验。 升级可以增加攻击力、防御力、生命。 问选择杀敌顺序使得所有怪物全部杀掉,而且剩余的生命值最大思路:养成DP思维,我们有2^n 种杀敌顺序,利用state [0 ,1 < < n ) ,可以把所以的顺序表示出来,这个时候可能会有疑问,000110, 表
2018-08-21 10:49:39
592
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 线段树(区间操作+lazy) 很好的模板以及心得体会
参考博客https://blog.csdn.net/neighthorn/article/details/52115830这里只讨论区间处理+lazyacm比赛考察不会出裸的模板,所以必须深刻理解线段树原理,各函数的目的。#include <string.h> #include <algorithm> #include <stdio.h> ...
2018-07-27 11:10:47
245
原创 设计模式
一、创建型1、单例模式注意双重锁检查时,对象要加上volatile:uniqueInstance = new Singleton();分为以下几步执行1)为uniqueintsance分配内存2)初始化3)将uniqueInstance指向分配的内存地址因为JVM具有指令重排。所以执行顺序可能编程 1&amp;amp;amp;amp;gt;3&amp;amp;amp;amp;gt;2, 当线程T1执行了1) 3),然后线程T2调用getUniqu.
2019-09-23 20:30:20
439
原创 线程池
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...
2019-08-13 16:23:25
507
原创 Redis面试
1、更新操作https://coolshell.cn/articles/17416.html不可以先删除缓存,再更新数据库。 因为并发操作下, 一个更新操作删掉了缓存, 此时一个读操作进来,读取了旧数据,并且添加到缓存(读速度大于更新)。 那么脏数据就一直脏下去了。正确做法是 更新操作 先删掉缓存, 再更新数据库。2、缓存穿透:查询一个必然不存在的数据。比如文章表,查询一个不存在的id,每...
2019-08-11 23:46:19
455
原创 复合索引的正确理解
复合索引的结构参考《MySQL技术内幕:InnoDB存储引擎 第2版》复合索引的结构首先正确的认识复合索引的结构,非叶子节点上是存在索引值的例如以a、b字段建立复合索引,那排列如下通过叶子节点,就能拿到数据(1,1)、(1,2)、(2,1)、(2,4)、(3,1)、(3,2)索引使用数量参考 https://www.cnblogs.com/cyhbyw/p/8845937.html...
2019-08-11 11:04:07
5275
1
转载 (转)最为透彻的utf-8、unicode详解
转自:https://blog.csdn.net/tcf_jingfeng/article/details/80134600#commentBox1、unicode的诞生ASCLL表只包含了英文字符和一些符号,用一个字节表示(只用了0~127)。中国人发明了GBK编码表,采用两个字节来表示所有的汉字(博大精深!渐渐的编码表多了起来,不同的编码规则下通信就容易造成乱码,因此国际标准组织就发...
2019-05-29 09:52:19
573
转载 剑指offer题目分类
转自 https://blog.csdn.net/Lollipop66/article/details/80854497一、线性表1、数组思路总结:点击打开链接面试题3:数组中重复的数字面试题4:二维数组中的查找面试题11. 旋转数组的最小数字面试题21:调整数组顺序使得奇数位于偶数前面面试题39:数组中出现超过一半的数字面试题40:最小的k个数面试题42:连续子数组的最大和...
2019-03-26 15:35:30
495
原创 Linux进程创建和进程状态R、S、D、T、Z、X
进程创建之:fork()#include <unistd.h>pid_t fork(void); // 在父进程中,返回值是子进程的id /// 在子进程中,返回值是0 // 返回-1表示发生了错误如何理解fork呢? fork之后,将存在两个进程,并且都从fork的下一个语句开始执行。 两个进程拥有值相等但是空间独立的内存(堆、栈等)要注意的是fork之后的子进程和父...
2019-03-26 14:49:10
1323
原创 Java中的String传递副本
Java中只有String类型和基本类型传递副本,副本的改变不会影响原来的值。看下面的代码:package algorithms.com.guan.javajicu; public class Example { String str = new String("good"); char[] ch = {'a','b','c'}; public static void mai...
2019-03-21 19:36:04
512
原创 站在二叉树的右边,打印看得到的结点
void fun(TreeNode head) { Queue&lt;TreeNode&gt; queue = new LinkedList&lt;&gt;(); queue.offer(null); queue.offer(head); while (!queue.isEmpty()) { TreeNode ...
2019-03-11 14:45:52
701
原创 Java容器(三)Map
一、TreeMapTreeMap封装了红黑树,在代码里的体现就是private transient Entry&amp;amp;amp;amp;amp;lt;K,V&amp;amp;amp;amp;amp;gt; root; 也就是一个key,value键值对。具体的红黑树操作都在里面,就不细讲了。1.1 put(k,v)remove(k)也是和下面道理相似,理解就行。public V put(K key, V value) { // 获得根结点 .
2019-03-10 15:49:21
193
原创 Java容器(二)Collection集合
一、 SetTreeSet : 内部维护了一个TreeMap,插入的值作为map的key,value用默认值。特性是:排序,去重。HashSet: 内部维护了HashMap,特点是插入和查找,时间复杂度 o(1), 但是迭代的顺序是乱序。LinkedHashSet:内部维护了LinkedHashMap,特点是去重,可以按照插入的顺序进行迭代。Set没啥好讲的,原理都是Map,因此到时候理...
2019-03-08 14:30:36
162
原创 Java集合(一) Iterator
Iterator接口Iterator有两个必须实现的方法。hasNext用于判断是否包含下一位;next用于返回当前值,并且光标向后移。另外两个默认方法继承是可选的因此要想判断一个数据结构支持remove?那么必须看它的remove()如何实现。public interface Iterator&amp;lt;E&amp;gt; { boolean hasNext(); E n...
2019-03-07 08:28:11
112
原创 B树和B+树和红黑树
一、B树粗略定义B树是二叉树的拓展,相对二叉树,B树的孩子个数被定义为m,通过m-1个关键字key进行分割,例如 第一个结点的key:10 ,那么就把子树分成了小于10的部分和大于10的部分。根节点的右子树, key 14 20 , 就把子树分成了小于14;大于14 且 小于20 ; 大于20 的三个区间。 每个区间再对应一个结点。定义规则对于整棵树来说:根节点至少1个key,2个子...
2019-03-05 19:39:40
2486
原创 try{return } finally{ retun }的执行顺序
一、finally的执行顺序先来看一段代码import java.util.*;public class Main { public static void main(String[] args) { System.out.print(fun1()); } public static String fun1() { try { ...
2019-03-04 20:26:48
365
原创 Java ArrayList 扩容
京东笔试遇到了,之前从没研究过,在这里做记录。CAPACITY: 容量第一步首先进入ArrayList的内部看一眼构造函数,这个是带参数的构造方法,容量Capacity的大小和初始化的大小一致, 当初始化的参数为0,容量Capacity为默认值 = 10 。 找到常量即可。此外可以看到,ArrayList存放的东西都放在了this.elementData,是个Object[] 的数组。...
2019-03-04 19:52:32
1462
原创 BitMap算法
bitmap的适合用于判断一个数存在或者不存在,也就是具备01特性。它的原理是这样的:一个整型的数4byte == 32 bit。bitmap算法把它的32位展开,让第i位为1代表数值i存在,例如下面的a[0]代表 1 5 30存在,而0 2 3 4 则不存在。a[0]: 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 ...
2019-03-04 10:54:49
142
原创 01背包方案数
1、裸的01背包方案数网上各大公司经常出题目:假设现在有1元、2元、5元的纸币各1张,现在需要20块钱,你能给多少种找钱方案,这就可以认为是完全背包问题,即背包容量为20,物品体积分别为1、2、5。解法:让dp[i][j]表示前i种钱里面选出总和为j的方案数,那么dp[i][j] = dp[i-1][j] + dp[i-1][j-v[i]]每次考虑第j个选还是不选的情况。初始化是 dp[0...
2019-03-03 21:45:21
1110
1
原创 200道Java面试题
https://www.nowcoder.com/discuss/157387?type=0&amp;amp;amp;order=1&amp;amp;amp;pos=6&amp;amp;amp;page=1题目来自牛客网大佬,每天刷一点1、JDK和JRE的区别?JRE:Java Runtime Enviroment, 它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。同时还包含了编译java源码的编...
2019-03-03 16:14:37
1701
2
原创 LRU算法最近最少使用 ----- Java实现
LRU算法常用于页面置换算法,是为虚拟页式存储管理服务的。他的设计思路是最近使用过的,就认为在将来有很大概率会使用。现在认定缓存中的数据是key,value形式, 一种实现方式是使用链表,用链表存储key,value,把最近使用到的节点转移到头节点。分析时间复杂度:查找 o(n) , 插入o(1), 删除 o(n)。这里使用了map进行优化,在缓存中的结点,都保存一组key,TreeNode到...
2019-03-01 18:59:12
518
原创 剑指offer 之 按之字形顺序打印二叉树 (加重点,记得回顾)
题意请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解法我自己的解法比较直白,应付笔试还行,但是面试上用我的方法肯定会被鄙视。这里介绍讨论区中大神的方法。双向队列法有下面几点值得学习1)在返回ArrayList<ArrayList< Integer > > 这种双层L...
2019-03-01 09:22:48
125
原创 左神算法讲堂笔记 09 由递归到动态规划
一、有n个人希望把黄金分隔成 {a1,a2,a3,a4}, 希望代价最小。 代价是这么算的,例如长度是 7 ,分割成 3 4, 那么代价是7 。逆向思维、哈夫曼编码一开始的想法是,排序,每次切下来最大的。 但是 2 2 2 2 3 3 3 3 这种情况就pass了。 最后的做法是类似哈夫曼编码, 每次找出两个最小的, 合并,合并之后的点再加进去集合。二、有n个项目,对于第i个项目,需要花...
2019-02-28 13:16:12
1002
3
原创 剑指offer 之 和为S的连续正数序列
题意给出整型sum,问能求出多少连续序列之和等于sum,例如9 -> 45 , 234解法第一种:双指针,当双指针之间的和 tot == sum,low++,high++; 当 tot < sum,high++; 当tot > sum,low++; ArrayList<ArrayList<Integer>> res = new ArrayList...
2019-02-26 09:42:13
78
原创 春招面试复习(三)数据库的ACID , 并发问题,事务等级,乐观锁,CAS算法,索引
1、mysql的基本要素(ACID):原子性:针对操作,事务如同生物中的原子一样密不可分,事务内的事必须是全部完成,如果发生了故障,那么需要回滚到事务开始前的状态。一致性:个人理解的一致性是一种状态。事务执行前和执行后的一致性不会发生改变。例如A给B转钱, 那么A-=100, B+=100 。这样保证了一致性。 另外提一下原子性和一致性的区别? 例如 A-=100 ,B+=500 ,这样遵循...
2019-02-25 17:32:58
279
原创 剑指offer 之 把数组排成最小的数
题意输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。做法这种题必定是贪心类的题,那么核心问题就在于如何写比较器。回顾一下比较类型的排序算法,例如冒泡排序,通过比较器判断什么样的数据排在前面。在本题中:两个字符串s1 = ba 和 s2 = b ,按照什么标准进行...
2019-02-25 15:51:32
124
原创 左神算法讲堂笔记 07并查集和前缀树
岛只分析多线程下如何优化。假设把矩阵分成两块,交给两个线程去处理。那么各自跑完会在地图上标注**当前的1属于哪个中心点(多线程间全局变量可以使用volatile关键字)先站在左边一方的角度考虑,只需要把边界上的1,即图上的A位置。接着向右边进行询问,由于右边的格子上是1,那么就把AC进行合并(使用并查集进行优化),岛的数量-1。 下一次遇到AC的时候,并查集查询到属于同一个集合,那么就不...
2019-02-25 15:47:26
695
原创 剑指offer 之 数组中只出现一次的数字
题意:一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。解法:遇到重复数字出现要想到异或,A^A = 0 , 0 ^ A= A ,我们把数组异或完,得到的是tot = num1 ^ num2 , 那么如何将他们区分开呢? 找出tot的二进制下,最左边的1的位置idx,那么这个1必定由其中的一个num提供。因此把idx位置为1的数都异或起来,最终得到的是...
2019-02-25 10:05:22
83
原创 剑指offer 之 数字在排序数组中出现的次数(外加二分总结)
题意统计一个数字在排序数组中出现的次数。做法二分,本道题有总巧妙的想法: 找出第一个大于 k -0.5 ,和第一个大于 k + 0.5 的位置。后面减前面即可。public int GetNumberOfK(int [] array , int k) { if(array == null || array.length == 0) return 0...
2019-02-25 09:15:30
100
原创 左神算法讲堂笔记 06 Hash算法
1、哈希函数和哈希表当通过put方法存入对象时,会调用key对象的hashCode()方法计算出hashcode,通过hashcode找到bucket位置保存entry对象。获取对象时,通过key计算出hashcode,找到bucket位置,HashMap采用链表解决碰撞,因此遇到冲突时,就访问bucket位置上链表的每个点,直到key对象的equals()相等。jdk1.8后,当链表长度大于...
2019-02-24 18:28:19
338
原创 剑指offer 之 整数中1出现的次数(从1到n整数中1出现的次数)
理解了讨论区高票做法题目描述求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。做法先讨论百位,称遍历100.101.102…199 ...
2019-02-24 10:58:54
211
原创 春招面试复习(二)Java基础
一、数据类型基本类型byte/8char/16short/16int/32float/32long/64double/64boolean/~ 编译时期会转换成int缓存池new Integer(123) 和 Integet.valueOf(123)的区别new Integer(123) 每次都会新建一个对象;Integer.valueOf(123) 会使用缓存池中的对象...
2019-02-23 21:46:00
1559
原创 牛客网高级项目总结
1、注册和登陆登陆和注册成功之后,在cookie里添加上token,另外在数据库中插入包含token、userId的表,用于登陆状态检验。具体检验是在拦截器上进行,拦截器的实现过程:1)继承HandlerInterceptor接口,完成preHandle()用于请求之前、postHandle 渲染界面之前、afterCompletion 请求之后,三个方法。 2) 之后把得到的拦截器对象在 ...
2019-02-23 19:36:11
8511
21
原创 高级项目 评论模块和消息中心模块
一、评论中心模块开发无论是问题的评论,还是评论的评论,都是基于评论中心的。1、数据库2、javaModel实体和数据库一一对应的实体3、DAO层评论list是通过entity_id(归属的实体ID)和entity_type(归属于何种实体)进行确定的。1) 添加评论(向表中插入一条数据) @Insert({"insert into ", TABLE_NAME, "(", INS...
2019-02-23 19:12:27
3663
原创 左神算法讲堂笔记 05 树
1、非递归遍历树非递归遍历有点难,目前只能读懂代码,里面的精髓还未真正参透。先序遍历:不断地把根入栈,再取出来输出根左右, 那么先入栈的肯定是根,要保证输出左子树,再输出右子树,那么就要先入栈右子树。void preOrderUnRecur(Node head) { System.out.println(&quot;先序 根 左 右: &quot;); if (head != ...
2019-02-21 14:57:01
190
原创 左神算法讲堂笔记 03 栈的应用
1、栈1.1 栈的拓展应用案例1 求栈最小值一个数组序列,不断压栈,可以询问栈内最小值,且push、pop、peek、query(找最小)都是o(1)。解法;维护本身栈的同时,维护一个min栈,当前数小于min栈栈顶,那么就插入min栈顶。 否则再插入一个min栈栈顶元素。案例2 使用栈得到队列结构维护push 和 pop 两个栈。插入的话就放到push栈。 pop时,假设pop栈为...
2019-02-20 10:53:12
172
原创 左神算法讲堂笔记 02 快排、堆排、桶排
1、荷兰国旗问题(快排的前导)题意:把数组分成左边小于num,右边大于num,中间等于num,不需要有序解法:假设区间为[L , R] 维护一个左边小于区间,[L - less] ,维护一个右边大于区间 [more - R], 设当前下标为cur,不断把arr[ cur ]交换到左区间或者右区间即可。这里的while写的很巧妙,每次只针对cur进行判断,把后面的换过来之后,cur不动,下一...
2019-02-20 10:52:03
421
原创 左神算法讲堂笔记 01 归并排序和应用 --- 小和问题、逆序数
1、master公式求递归的时间复杂度T(N) = a*T(N/b) + O(N^d)log(b,a) &amp;amp;gt; d -&amp;amp;gt; 复杂度为O(N^log(b,a))log(b,a) = d -&amp;amp;gt; 复杂度为O(N^d * logN)log(b,a) &amp;amp;lt; d -&amp;amp;gt; 复杂度为O(N^d)2、归并排序(合并的时候
2019-02-20 10:50:19
519
原创 左神算法讲堂笔记 04 宏观调控和链表
1、绕圈打印矩阵 public ArrayList&amp;amp;amp;amp;lt;Integer&amp;amp;amp;amp;gt; printMatrix(int[][] matrix) { ArrayList&amp;amp;amp;amp;lt;Integer&amp;amp;amp;amp;gt; list = new ArrayList&amp;amp;amp;amp;lt;&am
2019-02-20 10:48:11
178
原创 春招面试复习(一)TCP/IP
SYN:建立连接ACK:响应seq:例如A-&amp;gt;B, 则发送端(A)发送包的第一个位置ack:例如B-&amp;gt;A ,则B希望下一次收到的包的位置。一、连接建立阶段1、为什么TCP建立是三次握手?TCP是可靠的传输控制协议,三次握手能保证数据可靠传输又能提高传输效率。如果两次握手的话:1) 如果server给client发送的ACK报文因为网络原因,报文被丢弃,此时server...
2019-02-19 16:46:56
456
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人