算法
文章平均质量分 69
fenglllle
这个作者很懒,什么都没留下…
展开
-
base64编码的原理
最近做项目,经常使用base64把byte[]转为String存储,毕竟byte数组不好存储,就对base64的原理好奇,研究了下,发现base64后长度增加了,这个64代表的含义呢,2的6次方,在2进制有特别的含义,毕竟1byte=8bit,这中间有些特殊的设定意义。原创 2022-08-23 22:41:45 · 616 阅读 · 0 评论 -
洼地数组算法
前言一种算法,计算洼地的容积简易版,洼地数组的容积计算计算思路实际上计算洼地的容积很难,立体空间,最常用的方式是极限思想,微积分,类似割圆术。把立体空间认为是很多微小的立方体。那么进一步简化,计算2维空间的洼地容积实际上还是可以使用极限的思想,看成长方形,通过无线趋近的方式计算出来,不过这里的算法仅仅是一种更简单的算法,计算数组的洼地容积,即点的容积:如下图var arr []int = []int{3, 5, 4, 6, 1, 4, 1,3}计算洼地的数字的容积值的和原创 2022-05-15 21:37:50 · 265 阅读 · 0 评论 -
comparator和comparable的使用
comparator和comparable前言comparablecomparable democomparable源码分析comparatorcomparator demoComparator源码分析总结前言最近笔者被问到对象排序的时候,要求是传入不同的规则,排序不一样,类似一个按不同的条件排序的功能,笔者想到了comparator,其实comparable也是可以的,只是不太符合这个功能而已,通过comparator的切换即可实现。comparablecomparable democompar原创 2020-07-07 22:05:53 · 515 阅读 · 0 评论 -
为什么对象重写equals方法必须重写hashCode方法
前言我们知道重写equals方法必须重写hashcode方法,此文从一些使用角度分析原因1. hashCode方法源码 public class Object { /** * Returns a hash code value for the object. This method is * supported for the benefit of has...原创 2018-11-25 12:32:31 · 724 阅读 · 1 评论 -
JDK8线程池-ThreadPoolExecutor动态调整corePoolSize与maximumPoolSize
前言线程池ThreadPoolExecutor在运行的过程中,业务并发量变动,需要不停服务调整线程池的线程数,ThreadPoolExecutor支持动态调整corePoolSize与maximumPoolSize的值。1. 示例demopublic class ThreadChangeTest { public static void main(String[] args)...原创 2018-11-25 10:28:42 · 10767 阅读 · 7 评论 -
LockSupport park和unpark
前言在上一篇文章线程池返回值Future中,源码分析线程池结果获取阻塞的原因。LockSupport.unpark(t);LockSupport.parkNanos(this, nanos);或者LockSupport.park(this);使用unpark唤醒线程,使用park阻塞线程,下面介绍他们的作用以及与wait和notify或者notifyAll的区别。1. Lock...原创 2018-10-14 21:03:38 · 3946 阅读 · 1 评论 -
多线程交叉打印数字,线程切换,结果通知
前言一道面试题,两个线程交叉打印奇偶数。核心是多线程交替切换。 1. synchronized锁机制,wait和notifyAll方法本质锁竞争仅在线程需要的时候持有锁,其余时间检查自身线程锁,释放线程自己持有的锁。public class Test2 { public static void main(String[] args) { Num ...原创 2018-10-11 20:50:50 · 1732 阅读 · 0 评论 -
Java基本数据类型存储与包装类源码解析
1. 首先,字节即byte,是二进制,最小的存储单位;位即bit,比特流,常用于网络传输:1byte=8bit。2. 8种基本数据类型为:byte、short、int、long、float、double、char、boolean。Java中没有类似C语言中的sizeof()函数,该函数的功能是计算变量的字节数。但是Java中有包装类定义了8种基本数据类型的size(单位bit,...原创 2018-09-14 12:17:54 · 557 阅读 · 0 评论 -
LRU算法,以及Apache LRUMap源码解析
1. 什么是LRULRU(least recently used) : 最近最少使用LRU就是一种经典的算法,在容器中,对元素定义一个最后使用时间,当新的元素写入的时候,如果容器已满,则淘汰最近最少使用的元素,把新的元素写入。1.1 自定义实现LRU的要求比如redis,如何自己实现简易版的redis缓存。那么我们需要一种数据结构,支持set和get操作。1) get操作时...原创 2018-09-13 11:01:47 · 2732 阅读 · 0 评论 -
数组x[]两个数之和等于某个数k,计算所有符合要求的下标组合
一道算法面试题数组x[],数组里面,两个数之和等于某个数k,计算所有符合要求的下标组合。 解法1:很容易想到双循环法,复杂度O(n^2),查询效率低,但不占用额外的空间。 public static void twoLoop(){ int[] x = {1,2,3,6,8,9,12,13,16,18,34,23,25,16,18}; List...原创 2018-09-12 11:38:08 · 1369 阅读 · 0 评论