java
demo易
带你玩转编程世界,一起学习,一起进步。
展开
-
java实现生产者与消费者
生产者与消费者模式是一种经典同步案例 下面我用代码来描述一下这个同步该如何实现 实现基于lock+Condition 模式import java.util.ArrayList;import java.util.List;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;imp原创 2017-07-14 17:57:13 · 671 阅读 · 1 评论 -
排列组合问题
public class Main { static int num=0; public static void swap(char[] arr,int i,int j){ char temp; temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } public st...原创 2018-05-04 22:40:15 · 179 阅读 · 0 评论 -
java经典笔试题~求链表是否带环,即其链表的长度
已经知道一条链表的头结点,求一个链表是否带环路,以及该链表的长度。 解题思路:遇到这种问题我们可以这么解决,我们想一下以前学数学的时候有也做过这种需求的题目,当A以x的速度沿着这条路跑,B以2x的速度沿着这条路跑,问这条路是否是存在环路的,并且求这条路的长度,我们很容易会想到当A如果能与B在开始后某一时刻相遇,说明这条路是存在环路的,如果A和B永远不会相遇说明这条路不是存在环路的。同理我们可以用俩原创 2017-10-22 13:49:50 · 694 阅读 · 0 评论 -
bitMap
bitMap 因为是用位来存储,相比较其他数据来说比如int ,可以多存32个不同的数据。 bitMap适用场景,将给定一个10亿级的不重复的int型数据集合A,查询某个数据是否在A中。 如果用普通的数组存储或者HashMap,那么内存绝对要爆掉,可以计算一下4*10*10^8/1024/1024/1024=3.7G 如果用bitMap存储计算一下内存10*10^8/8/1024/1024/1原创 2017-09-18 16:17:08 · 482 阅读 · 0 评论 -
笔试经典题之链表倒序
假设有下面的这个链表 那么如何让它倒序了 首先我们创建两个值为null 的链表节点引用如下图 next=head.next; 执行上面的操作链表变化如下 head.next=pre; 因为pre=null 所以可以等价于下面这张图 pre=head; head=next; 这是第一次循环的结果 我们在来一下就可以看到神奇的变化了 next=head.原创 2017-09-09 18:29:38 · 323 阅读 · 0 评论 -
用java实现银行家算法
银行家算法核心是 先寻找满足系统当前剩余的资源量(avaliable )>=进程运行所需的资源数的进程(need),再假设这个进程安全校验是成功的,当这个进程运行完毕后,释放资源后,现在系统当前剩余的资源(avaliable)=avaliable+该线程之前已分配的资源(allocation) ,将该节点进程设为处理时忽略进程,再以上条件为前提进行安全校验。最后不断重复此步骤直到找出安全的执行序列原创 2017-07-17 15:00:45 · 7573 阅读 · 1 评论 -
java实现读者-写者问题
问题背景:一个数据文件或记录,可以被多个进程或者线程共享,其中不同的读进程可以并发的访问该临界资源,读和写进程或者线程,不能并发的对该临界资源进行错误,否则造成脏读和脏写。而我们今天的读者和写者模式 也成为读写锁,不过这里以信号量的方式进行互斥操作,就可以解决这个问题。 下面来看代码import java.util.concurrent.ExecutorService;import java.u原创 2017-07-15 17:53:17 · 4726 阅读 · 1 评论 -
java实现哲学家进餐问题,及其死锁问题的解决
首先我们来了解一下哲学家进餐问题的背景: 话说有5个哲学家围在一张桌子上吃饭,桌上只有5g根筷子,一个要吃饭必须的得有两根筷子,哲学家要吃饭时总是先拿起左边的筷子,在拿起右边的筷子,这样最佳的情况是可同时有两人可以进餐,最坏的情况是大家都拿起了左边的筷子,大家都没得吃。哲学家吃完时会停下来思考一段时间,等饿了在吃。 下面我们来看一下java如何模拟哲学家进餐问题import java.util.原创 2017-07-15 15:34:37 · 9845 阅读 · 3 评论 -
用java实现操作系统的前趋图
学过操作系统的人都知道前驱图是一个很好用来描述多个进程或线程间的同步执行的过程 科普一下同步的概念:同步是用来描述多个并发线程或进程按某种规则顺序执行的过程。 首先我们来看一下最简单的前趋图 java如何实现了 有俩种方式 第一种基于Lock+Condition方式import java.util.concurrent.ExecutorService;import java.util原创 2017-07-14 16:25:51 · 1953 阅读 · 1 评论 -
史上最简单的kafka实战教程
你在写java 版的 kafka程序可能会遇到如下问题问题一:程序抛出了org.apache.kafka.common.errors.TimeoutException:在application.yml 中加入下面这句话 :logging.level.root:debug然后再看报错,可以发现下面这个错误错误:java.io.IOException: Can't resolve address: u...原创 2018-06-26 16:07:28 · 5302 阅读 · 1 评论