3 loren-encoding

尚未进行身份认证

学生

等级
博文 40
排名 7w+

java-生产者消费者模式

经常会有公司叫我们手撕代码,比如网易,阿里,那我们是不是该掌握下呢。下面这段代码来自《现代操作系统》进程与线程P49页。publicclassProducerConsumer{publicProducerConsumer(){}privatestaticfinalintN=100;staticProducerproducer=newProd

2017-08-28 08:47:26

解压字符串

题目:某位程序员想出了一种压缩字符串的方法,压缩后的字符串如下:3{a}2{bc},3{a2{c}},2{abc}3{cd}ef,现在需要你写出一个解压程序,还原原始的字符串,如:s=“3{a}2{bc}”return“aaabcbc”,s=”3{a2{c}}”return“accaccacc”,s=”2{abc}3{cd}ef”return“abcabccdcdcdef”

2017-08-27 09:54:35

Java-break,continue,return用法

当年的我也算是基础小王子,但是长时间的不用导致我与他们越来越陌生了,所以我要把他们记在我的本本上。首先我们要明白,java中到底有多少个循环关键字?答:没错,就是3个,他们分别是:for(初始值;条件变量;增量),do{}…while(),while{}。break:跳出循环,执行循环体下面的语句;continue:继续循环,重新回到循环体初始位置,继续循环;return:直接跳出循环

2017-08-24 15:55:21

归并排序-Java

归并算法:就是两个有序的序列,通过归并排序,变成一个有序的队列。如图所示,对于一个序列的排序,可以这样做:首先,将序列分解成单个的数,,然后对相邻的有序序列通过排序逐渐整合为一个大的有序序列。这就是归并排序。下面是我写的java代码:publicclassGuiBingPaiXu{//此方法通过递归将数组分成单个的数字publicstaticvoidmergeSo

2017-08-21 14:57:48

ConcurrentHashmap中的size()方法简单解释

本文所有的源码都是基于JDK1.8ConcurrentHashmap中的size()方法源码:publicintsize(){longn=sumCount();return((n<0L)?0:(n>(long)Integer.MAX_VALUE)?Integer.MAX_VALUE:

2017-08-21 10:31:01

HashMap和ConcurrentHashMap流程图

本文表达HashMap和ConcurrentHashMap中的put()方法的执行流程图,基于JDK1.8的源码执行过程。HashMap的put()方法:ConcurrentHashMap的put()方法:finalVputVal(Kkey,Vvalue,booleanonlyIfAbsent){….}1.key或value是否为空,是的话,抛异常newNullPoin

2017-08-20 21:05:15

static和final修饰方法

static修饰的方法是静态方法,所有的对象共用一份,也就是共享方法。static方法是可以被继承,然后可以被重写和重载。final修饰的方法是不可变方法,final方法所在类被继承时,被final修饰的方法是不能被重写的,但是可以重载。

2017-08-19 17:18:33

Partition函数

快排中核心的方法应该算是Partition函数了,它的作用就是将整个数组分成小于基准值的左边,和大于基准值的右边。普通的Partition函数是这样的:publicstaticintpartition1(int[]array,intlo,inthi){//以第一个值为基准值,当然你也可以3取1,intkey=array[lo];wh

2017-08-17 15:06:27

堆排序—Java

堆排序:一棵完全二叉树,如果父节点的值大于等于左右节点的值,则称此完全二叉树为小根堆(小顶堆);如果父节点的值小于等于左右节点的值,则次完全二叉树为大根堆(大顶堆)。堆排序是建立在大顶堆或小顶堆的基础上的,通过不断的交换堆顶元素和堆尾元素,来对数组排序。基于大顶堆的堆排序,数组排序结果是升序的。基于小顶堆的堆排序,数组排序结果是降序的。流程:(1)建立堆(2)交换堆顶与堆底元素(3)

2017-08-17 10:24:47

打印1到最大的n位数-Java

在练习剑指offer的时候,第12题打印1到最大的n位数的时候,想找个java版的,但大家要么用BigInteger做,要么给出其他的方法。我觉得要给就给最好的方法,下面是我自己参考C++代码写的java版的全排列方法。代码:publicclassQuanpaixu{publicstaticvoidprint1ToMaxOfNDigits(intn){if(n

2017-08-13 14:43:39

两个大数相乘-Java

两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示。例如S1=”7832974972840919321747983209327”,S2=”1987432091904327543957”,设计算法计算出S1*S2的结果,结果用String输出,不准用BigInter。思路:根据手工计算两数相乘的过程,用代码实现这个过程。代码:importjava.util.Scann

2017-08-02 11:35:39

通俗易懂的Java序列化原理

序列化能干吗?(1)通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里)(2)利用序列化实现远程通信,即在网络上传送对象的字节序列。网上搜索的都是这样的解释,抽象,难懂。我当时看见这两问题的时候,我就有两个问题?(1).txt,.java,.class文件我也没序列化,不也保存在银盘上了吗?我写的java对象没实现serializable,不也保存在我的硬盘上了吗?.java,

2017-07-30 11:07:37

猜数游戏

来源:牛客网2017年校招全国统一模拟笔试(第五场)编程题集合本文是转载博客,原博客:[编程题]猜数游戏题目:牛牛和羊羊在玩一个有趣的猜数游戏。在这个游戏中,牛牛玩家选择一个正整数,羊羊根据已给的提示猜这个数字。第i个提示是”Y”或者”N”,表示牛牛选择的数是否是i的倍数。例如,如果提示是”YYNYY”,它表示这个数使1,2,4,5的倍数,但不是3的倍数。注意到一些提示会出现错误。例如:

2017-07-29 20:05:34

Java中的检查异常和未检查异常

已检查异常,指的是一个函数的代码逻辑没有错误,但程序运行时会因为IO等错误导致异常,你在编写程序阶段是预料不到的。如果不处理这些异常,程序将来肯定会出错。所以编译器会提示你要去捕获并处理这种可能发生的异常,不处理就不能通过编译。就比如所有trycatch的异常都是已检查异常。因为已检查异常必须被处理。未检查异常,也就是RunTimeException异常,指的是你的程序逻辑本身有问题,比如数组

2017-07-29 15:37:41

求链表内环的入口节点-Java

步骤:1.设置快慢两个指针,slow和fast,每次slow走一步slow.next,而fast走两步fast.next.next.2.如果链表有环肯定可以在环内的一个节点相遇.3.此时,slow指向相遇的节点,而fast指向头结点,然后slow和fast继续走,每次都走一步,slow.next,fast.next.当slow和fast指向同一个节点的时候就是入口节点,那么这是为什么呢?

2017-07-29 10:51:14

Thread.interrupt()方法理解

原博客地址:多线程编程实战篇(四)不客气地说,至少有一半人认为,线程的”中断”就是让线程停止.如果你也这么认为,那你对多线程编程还没有入门.在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段.不但不是让线程停止运行,反而是继续执行线程的手段.对于执行一般逻辑的线程,如

2017-07-27 23:07:45

java private修饰的类和变量

private主要用来修饰变量和方法,一般不会用来修饰类,除非是内部类。1.new对象被private修饰的变量和方法,只能在自己对象内部使用,其他对象即使是new你这个对象也是获取不到被private修饰的变量以及方法的。publicclassprivateClass{privatestatica=1;privatestaticvoidsetA(in

2017-07-25 11:26:12

Volatile和Synchronized对可见性和原子性的支持

在学习并发编程的时候,遇见了volatile和synchronized关键字问题,volatile是可以保证可见性,但无法保证原子性,synchronized关键字由于其是加锁机制,肯定是可以保证原子性的。但是它能保证可见性吗?也就是说被synchronized包裹的变量的值被修改后会立即送往主内存中吗?带着这个问题,我们继续往下看。结论:volatile关键字只是用来修饰变量,并且保证变量的可见性

2017-07-25 10:05:09

Socket套接字

socket编程,熟悉吧,那到底什么是socket呢?:我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口,来供应用层调用,实现进程在网络中通信。socket是一种进程间通信机制,提供一种供应用程序访问通信协议的操作系统调用,并且通过将socket与Unix系统文件描述符相整合,

2017-07-24 16:56:18

Spring MVC请求执行流程

学习SpringMVC时间有点长了,但是最近打算找工作,需要重新了解下,所以又去温故知新了。SpringMVC就是用来写web的框架,简化你写web的一些不必要的流程,让程序员能专注于业务逻辑也就是controller的代码编写。这篇文章是比较详细的描述SpringMVC的流程的,SpringMVC流程图下面我在此基础上做一些补充说明。这就是SpringMVC处理请求的流程。Sp

2017-07-23 16:11:03
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!