自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 java-生产者消费者模式

经常会有公司叫我们手撕代码,比如网易,阿里,那我们是不是该掌握下呢。下面这段代码来自《现代操作系统》进程与线程P49页。public class ProducerConsumer { public ProducerConsumer() { } private static final int N = 100; static Producer producer = new Prod

2017-08-28 08:47:26 315

原创 解压字符串

题目: 某位程序员想出了一种压缩字符串的方法,压缩后的字符串如下: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 547

原创 Java-break,continue,return用法

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

2017-08-24 15:55:21 377

原创 归并排序-Java

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

2017-08-21 14:57:48 263 1

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

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

2017-08-21 10:31:01 8994 1

原创 HashMap和ConcurrentHashMap流程图

本文表达HashMap和ConcurrentHashMap中的put()方法的执行流程图,基于JDK1.8的源码执行过程。HashMap的put()方法: ConcurrentHashMap的put()方法: final V putVal(K key, V value, boolean onlyIfAbsent) {….} 1.key或value是否为空,是的话,抛异常new NullPoin

2017-08-20 21:05:15 1897 1

原创 static和final修饰方法

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

2017-08-19 17:18:33 1770 2

原创 Partition函数

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

2017-08-17 15:06:27 27800 5

原创 堆排序—Java

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

2017-08-17 10:24:47 343

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

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

2017-08-13 14:43:39 340

原创 两个大数相乘-Java

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

2017-08-02 11:35:39 3864 1

原创 通俗易懂的Java序列化原理

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

2017-07-30 11:07:37 899

转载 猜数游戏

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

2017-07-29 20:05:34 1410

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

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

2017-07-29 15:37:41 955

原创 求链表内环的入口节点-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 429

转载 Thread.interrupt()方法理解

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

2017-07-27 23:07:45 5125 5

原创 java private修饰的类和变量

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

2017-07-25 11:26:12 10883 9

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

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

2017-07-25 10:05:09 358

原创 Socket套接字

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

2017-07-24 16:56:18 303

转载 Spring MVC请求执行流程

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

2017-07-23 16:11:03 1803 1

转载 Spring AOP术语解释

话说,越来越感觉有些人解释概念真的是晦涩难懂,我刚开始学习Spring aop时,对那些切入点,连接点,引入等概念搞得头疼。太多人就直接照搬定义,让我们这些初学者如何理解啊。下面是我找了大量的博客,终于找到一个大神,把概念解释的通俗易懂。 原博客地址:Spring AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)术语解释:通知(Advice) :就是你想要的功能

2017-07-22 22:14:32 1128

原创 equals()和==的区别

这个问题,总是记不住,那我就动手多写几遍,加强自己的记忆。 先给结论:  1)==。主要作用于基本数据类型的变量,比较的是二者的 “值”是否相等;如果作用于两个对象之间,则比较的是对象的地址是否相同。 2)对于equals方法。注意:equals方法不能作用于基本数据类型的变量,如果你创建的对象没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String

2017-07-21 22:21:42 262

原创 约瑟夫环之递归算法

问题描述: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。由第一个人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到最后剩下一个人。 一般的思路就是通过一个count计数的方法,循环遍历链表,逐一删除。但是这样的方法时间复杂度要有O(n×m),(总共要删除n-1个数

2017-07-21 15:36:14 745

原创 Java虚拟机说明书

JVM运行原理:JVM内存模型: JVM垃圾回收机制:

2017-07-19 20:41:30 346

转载 数据库特性之原子性和一致性

数据库的四大特性:原子性,一致性,隔离性和持久性。其中: 原子性:指事务包含的所有操作要么全部成功,要么全部失败回滚; 一致性:指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 我当时看见这两个特性就感觉很奇怪,难道原子性和一致性不是一样的吗?提交事务,原子性保证要么成功,要么失败,这样不就是很好的保证数据库的一致性了吗。当时我

2017-07-16 11:27:05 7230 1

原创 设计模式之单例模式

回顾概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,我在这里主要介绍两种:懒汉式单例和饿汉式单例。   单例模式有以下特点:   1、单例类只能有一个实例。   2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例。   单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、

2017-07-16 10:08:20 300

原创 平衡二叉树的插入旋转

平衡二叉树定义(AVL树) 平衡二叉树是在二叉排序树(BST)上引入的,就是为了解决二叉排序树的不平衡性,而不平衡性又是时间复杂度增大的主要原因。  例如:数组a=[12,24,37,45,53,93]建立二叉排序树为下图所示。左图为平衡二叉树,右图为二叉排序树。   图1 由上图可知,当你进行查找时,右图的平均查找时间高于左图

2017-07-13 22:00:04 996

原创 数据库索引B-树和B+树

一开始学习数据结构的时候,主要学习的是数组,队列,链表,队列,栈,树这些数据结构,其中树主要学习二叉树,平衡二叉树,二叉搜索树等这些子节点最多只有两个的树结构。但是,当我们接触数据库的时候,你会发现数据库的索引基本都是B+树,尤其以数据库MySql为甚。那么学习的时候我们碰到B树,B+树,那么他们结构是什么样的,有什么区别,能用在什么地方呢?什么是B树,B+树B也就是Balance的意思。B树是一

2017-07-13 15:41:27 342

转载 Java创建对象的几种方式

Java创建对象的5种方式: 1用new 语句创建对象,这是最常用的创建对象方法。 2.通过java.lang.Class的newInstance()。 3.java.lang.reflect.Constructor类的newInstance()实例方法。 4.调用对象的clone()方法 5.运用反序列化手段,调用java.io.ObjectInputStream对象的readObjec

2017-07-10 14:52:38 377

原创 Java对象中的finalize()方法使用说明

我在写java程序的时候,从来没有遇见过是用Object.finalize()的时候,但是在学习Java虚拟机的垃圾回收机制时,虚拟机在进行垃圾回收时需要使用finalize()方法来进行对象清理。下面是我总结finalize()的使用情况。

2017-07-10 10:33:54 295

原创 LeetCode315—Count of Smaller Numbers After Self—Java版归并算法

这是我在研究leetcode的solution第一个解决算法时,自己做出的理解,并且为了大家能看懂,做出了详细的注释。此算法算是剑指Offer36的升级版,都使用的归并算法,但是此处的算法,难度更高,理解起来更加费劲。/* * @Param res 保存逆变对数 * @Param index 保存数组下标索引值,排序数组下标值。 * 此算法使用归并算法,最大差异就在于merge

2017-06-14 22:48:13 251

原创 剑指Offer第36题—Java版

本题使用归并排序的思想,结合归并排序,写出的算法解。//数组中的逆序对public static int InversePairs(int[] array){ if(array==null||array.length<=1) return 0; int[] copy = new int[array.length]; //复制原数组 copy =

2017-06-14 20:35:41 222

原创 归并排序—Java版

一开始做算法的时候,感觉递归算法很绕,所以我就在阅读别人代码的基础上,对代码每一步都添加自己的注解,方便我以后的学习。public class MergeSort { /** * 归并排序 * @param nums 待排序数组 * @param low 初始索引 * @param high 结尾索引 * @return 输出排序完成的数组 */ public st

2017-06-14 20:33:49 191

翻译 4Sum——LeetCode

这是我刷题时,在观看solutions时看到的方法,此方法时间复杂度为o(n^3) 空间复杂度为o(1)。此方法思想最大优点是,可以将其运用到所有关于KSum这类算法中。Talk ischeap, Show me the code.public List> fourSum(int[] nums, int target) { ArrayList> res = new ArrayList>

2017-06-12 22:21:44 193

原创 求最长公共前缀和后缀—基于KMP的next数组

KMP算法最主要的就是计算next[]算法,但是我们知道next[]求的是当前字符串之前的子字符串的最大前后缀数,但是有的时候我们需要比较字符串中前后缀最大数,比如LeetCode的shortest Palindrome 就是基于KMP算法求最短子字符串。public static int[] longestPS(String s) { int sLen = s.length();

2017-06-11 14:51:02 3029

原创 Cannot convert 0 of type class java.lang.Integer to class java.lang.Boolean

org.apache.catalina.core.ApplicationDispatcher invokeSEVERE: Servlet.service() for servlet jsp threw exceptionjavax.el.ELException: Cannot convert 0 of type class java.lang.Integer to class java.l

2017-06-05 16:06:22 7843

原创 使用VMware Workstation安装win7镜像文件时遇见的错误

最近打算使用虚拟机安装个系统玩玩,就去网站上找了教程安装下win7系统。但是在安装过程中遇见两个问题,现在把遇见的问题总结记录一下,以及解决方法罗列一下。我当时使用的是VMware 12版的,系统是电脑公司的win7_X64.iso镜像文件。具体的安装流程网上都有,我当时是参考此文的安装流程。VMware虚拟机安装Win7教程问题一:启动WinPE光盘系统进入安装系统时,桌面只有我的电脑和

2017-05-27 09:56:45 10325

原创 每次启动懂maven项目都必须关闭javaw.exe进程

最近几天一致在搞配置问题,今天总于解决了。下面说问题:我发现我每次配置完maven build的goals运行,总是会出现TOMCAT绑定接口问题,我做的方法就是不断地关掉JAVAw.exe进程。但这不是根本。最终被我解决了,是因为eclipse的console控制台没有关闭一只运行导致的,所以必须把控制台关闭后才能再重启maven build。

2017-04-16 19:54:25 3524 2

原创 class对象详解

我们知道,对于java语言,我们一般先写一个类对象,表示对某一类对象概述,其中包括属性,方法等。我们在对类对象编译时,会产生一个.class对象,jvm在加载类对象时,是加载.class 对象文件,我们一般实例化对象,也就是 new对象时,其实是在加载.class文件,然后实例对象。加载.class对象有3种方法,name.class,Class.forName("name "),name.get

2017-01-17 16:58:36 366

原创 github如何搜索资料

进入自己的主页,然后点击explore→trending;或者google搜索,如github java 后端请参考:http://mp.weixin.qq.com/s?__biz=MzA4NTQwNDcyMA==&mid=2650662079&idx=1&sn=65605f0d9bd741d38f0b179980dc09f1&scene=21#wechat_redirect

2016-10-22 15:56:30 3029

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除