- 博客(21)
- 收藏
- 关注
原创 算法:扑克牌顺序问题
题目描述:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手机没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组。解题思路:原始牌堆可以看做一个队列,按照题目描述,首先出队一个元素,然后出队另一个元素,并将该元素入队。此时有两种解题思路,一种是正向,设原始队列的顺序是1-n,经过上述过程,会得到结果数组,将结果数组的数字为索引,索引为数字构建新数组即为原...
2019-12-05 20:18:23
2109
1
原创 一道阿里笔试题:ip转化为整数
题目描述:将ip转化为整数保存解题思路:ip用三个.来隔开,四个位置每个位置上的整数的范围是0-255,此时可以用int类型的8位来代表一个位置上的整数,涉及位运算。java中一个int类型占32位,第1-8位代表ip第一个位置上的整数,第9-16位代表ip第二个位置上的整数,以此类推。ip转化为整数:/** *将 ip转化为整数 */ public static...
2019-12-05 20:02:56
397
原创 阿里面试题:50枚硬币拿取问题
题目面试:桌面上有50枚硬币,一次可以拿2,4,6枚,另一位同学和你竞争,你拿一次,他拿一次,怎么保证最后一枚硬币是你拿到。解题思路:这种问题可以从后往前推,如果要保证最后一枚硬币你拿到,那么你倒数第二次拿硬币后应该剩下8枚,此时另外一名同学不管是拿2枚,4枚,6枚,那么你肯定能拿到最后一枚。50-8=42 剩下42枚,怎么拿取?可以观察2 4 6 这几个数字的特点,4+4=8 2+6=8 6+...
2019-12-05 20:00:40
1202
1
原创 算法题:循环码排列
题目描述:给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,…,2^n-1) 的排列 p,并且满足:p[0] = start,p[i] 和 p[i+1] 的二进制表示形式只有一位不同,p[0] 和 p[2^n -1] 的二进制表示形式也只有一位不同。解题思路:1.排列问题可想到深度优先搜索和广度优先搜索,但此题限制条件较多,搜索方向不易确定,不适合用这两种方法。2.可以联想...
2019-12-05 19:59:41
1352
原创 生产者消费者模型简单实现(java)
主要使用了juc中的Lock和Condition接口,代码如下:public class Storage { private static final int SIZE=100; private LinkedList<Object> linkedList=new LinkedList<>(); private final Lock lock=new...
2019-12-05 19:59:07
124
原创 B树和B+树结构上的区别
一个m阶的B树特征如下:1.非叶子节点最多有m个儿子;2.根节点的儿子书[2,m];3.除根节点外的非叶子结点的儿子数[M/2,M],向上取整;4.非叶子节点的关键字个数=儿子数-1;5.所有叶子节点位于同一层;6.k个关键字把节点分为k+1段,分别指向k+1个儿子;7.一个关键字只可能出现在一个节点中;8.搜索时有可能在非叶子节点结束;一个m阶的B+树的特征如下:1.有k个儿...
2019-12-05 19:58:38
187
原创 牛顿法求平方根java实现
牛顿法是一种将非线性方程线性化,用线性方程的解逼近非线性方程的解的求解方法。选取一个接近零点的x0,计算f(x0)和切线斜率f’(x0),切线方程为y=f(x0)+f’(x0)(x-x0),将切线与x轴交点的横坐标记为x1,x1比x0更接近方程的解,利用x1开始下一轮迭代,可得迭代公式:具体到求n的平方根,那么f(x)=x^2-n,f’(x)=2x,迭代公式为:具体代码:/** ...
2019-12-05 19:58:07
435
原创 算法题:判断一个整数是不是2的整数次幂
普通思路:拿这个数一直除以2,判断余数是否一直为0,直到这个数变为1.代码:public static boolean method1(int n){ while(n!=1){ if(n%2!=0) return false; n=n/2; } return true...
2019-12-05 19:57:21
327
原创 堆排序
堆的性质:大顶堆:每个节点的值都大于或等于其左右孩子节点的值。小顶堆:每个节点的值都小于或等于其左右孩子节点的值。堆排序基本思想:(以升序为例,升序用大顶堆,降序用小顶堆)1.构建初始堆;2.将堆顶元素与末尾元素交换,将最大元素沉到数组末端;3.重新调整堆的结构,使其满足堆定义,继续交换堆顶元素与当前元素,反复此步骤,直到整个序列有序。代码://堆调整 private st...
2019-12-05 19:56:48
53
原创 几种常见的性能优化方法
1.使用数据压缩算法,减少落盘数据大小,要针对不同的数据选择不同的压缩算法,考虑压缩率;2.使用内存映射技术,减少数据拷贝,充分利用pageCache;3.充分利用顺序读和顺序写,减少磁盘寻道和寻址时间;4.采用合适的数据结构与算法设计高效的索引;5.IO与计算分离;6.GC的优化,内存的优化,充分利用内存,减少GC;7.池化技术,线程池化,数据库连接池化等;8.使用NIO,减少IO...
2019-12-05 19:53:57
1945
原创 mysql表连接时on和where区别
mysql表连接时on和where区别数据库在连接两张表时都会生成一张中间表,将这张中间表返回给用户。left join时on条件指生成临时表时的条件,它不管on条件是否为真,都会返回左表的记录。where条件是临时表生成后再对临时表做过滤。对于inner join,on和where返回的结果是一样的,但是效率不同。on效率快,where效率慢!!!...
2019-06-07 10:13:48
897
原创 数据库中inner join有时候会比left join慢,可能的原因
数据库中inner join有时候会比left join慢,可能的原因如果单纯看逻辑运算数量的话,left join的逻辑运算数量会比inner join多,因为inner join只返回左右表的交集,而left join会返回左表中全部记录,若右表无对应记录,则置为null。Inner join在连接的时候会选取较小的表作为主表进行循环,减少循环的次数。Left join默认使用左表作为主表进...
2019-06-07 10:09:41
8196
3
原创 Mysql如果在执行事务过程中宕机了怎么办?
参考:https://www.cnblogs.com/zhiqian-ali/p/5668199.htmlredo log在innoDB的存储引擎中,事务日志通过重做(redo)日志和innoDB存储引擎的日志缓冲(InnoDB Log Buffer)实现。事务开启时,事务中的操作,都会先写入存储引擎的日志缓冲中,在事务提交之前,这些缓冲的日志都需要提前刷新到磁盘上持久化,这就是DBA们口中常...
2019-04-30 09:32:23
4255
原创 UnSafe类
参考:https://www.cnblogs.com/pkufork/p/java_unsafe.html内存管理。包括分配内存、释放内存等。非常规的对象实例化。操作类、对象、变量。数组操作。多线程同步。包括锁机制、CAS操作等。挂起与恢复。内存屏障。...
2019-04-29 19:41:19
97
原创 JDK8中的锁优化
参考:https://www.cnblogs.com/lkdirk/p/6719248.htmlLongAdder 类似automicLong, 但是提供了“热点分离”。过程如下:如果并发不激烈,则与automicLong 一样,cas赋值。如果出现并发操作,则使用数组,数组的各元素之和为真实value,让操作分散在数组各个元素上,把并发操作压力分散,一遇到并发就扩容数组,最后达到高效率。一...
2019-04-29 19:32:53
1833
原创 TCP中的滑动窗口
参考: https://blog.csdn.net/daaikuaichuan/article/details/83475809#font_size42font_228TCP中滑动窗口的作用:流量控制拥塞控制提高传输效率流量控制接收端窗口大小,代表接收端缓冲区还有多少大小,从而控制发送端发送大小,达到流量控制的目的。拥塞控制拥塞控制也就是考虑当前的网络环境,动态调整窗口大小,没...
2019-04-22 21:25:21
534
原创 TCP超时重传
名词解释RTT:一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值RTO:重传超时时间,即从数据发送时刻算起,超过这个时间便进行重传由于网络波动的不确定性,每个RTT都是动态变化的,所以RTO也应随着RTT动态变化RTT估计器TCP连接在重传定时器溢出就会重传数据,那么RTO怎么算?如果设置太短,会造成重传过于频繁,加快网络拥塞,如果设置太长,则会导致性能下降,失序的报文段无法得...
2019-04-22 20:39:27
170
原创 Java中的锁优化(偏向锁,轻量级锁,重量级锁)
参考《Java并发编程的艺术》参考https://blog.csdn.net/choukekai/article/details/63688332锁优化的意义为了减少获得锁和释放锁带来的性能消耗,java引入了偏向锁和轻量级锁,并对锁的存储结构进行了升级。synchronized在JVM中的实现原理JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,monitorenter...
2019-04-20 16:15:40
168
原创 redis实现分布式锁
分布式锁的使用场景高并发场景下对共享资源的写操作(多进程情况下),保证同一时间只有一个线程执行同步代码块。Redis实现分布式锁incr key 原子加decr key 原子减思路:执行incr key 返回1 则获取到锁,执行完业务逻辑后decr key 原子减(也可用setnx),为了避免死锁,用try finally,超时时间问题1:A业务逻辑执行时间若超过超时时间,锁会释放掉,...
2019-04-19 21:36:08
120
原创 java虚拟机的内存回收机制
java虚拟机的内存回收机制Minor GC的触发机制Full GC的触发机制Minor GC与Full GC的区别Minor GC的触发机制大多数情况下,对象优先在Eden区中分配。当Eden代中没有足够空间进行分配时,虚拟机将发起一次Minor GC。Full GC的触发机制在Minor GC之前,虚拟机会检查老年代最大可用的连续空间是否大于新生代所有对象总空间,如果这个条件,那么M...
2019-04-19 19:31:01
252
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人