- 博客(74)
- 资源 (1)
- 收藏
- 关注
原创 面试杂谈--新的征途
离找完工作已经有一段时间了,之前忙于毕业论文,一直没来得及总结一下,算是对自己的一个记录,也给找工作的朋友们一些经验杂谈。蘑菇街:2轮技术面,1轮hr面,1轮cto面 蘑菇街是内推提前批,因此也是拿到手的第一个offer,1面是视频面试,先自我介绍,然后介绍项目,然后介绍自己的擅长的,我是说的擅长并发,spring框架,面试官就着重问了并发,spring。AQS队列啊,IOC容器,AO...
2018-06-14 20:28:14
583
原创 java多态的实现的深入分析
java中的多态分为重载和重写,我们先来看一下这个代码/** * Created by kaizige on 2017/8/27. */class Animal{}class Cat extends Animal{}class Dog extends Animal{}public class People { public void say(Animal animal){
2017-09-17 16:13:38
227
原创 Spring的事物传播行为
以下讨论基于A.methoda()调用B.methodb(); 若B的事务隔离级别为:PROPAGATION_REQUIRED:(外面影响里面,里面不影响外面) 若A的方法没有事务,则创建一个新事务,若有事务,则加入当前事务。 如果A的方法a抛出异常,则A,B的方法都会回滚, 如果B的方法b抛出异常,则看A有没有捕获,没有捕获的话,A会回滚,捕获了的话,则会抛出新的异
2017-09-06 22:01:57
794
原创 数组中的逆序对(归并排序思路)
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%1
2017-09-03 10:42:14
342
原创 动态代理介绍
Person接口:/** * Created by kaizige on 2017/8/27. */public interface Person { public void walk();}Person实现类:/** * Created by kaizige on 2017/8/27. */public class PersonImpl implements Person
2017-08-27 14:34:16
181
原创 KMP算法
在长度为M字符串S1中找到长度为N字符串S2的匹配位置,没有找到返回-1。 使用KMP算法可以在O(M+N)时间复杂度完成。import java.lang.reflect.Array;import java.util.ArrayList;import java.util.Arrays;import java.util.Scanner;public class Main { publ
2017-08-27 11:56:11
163
原创 地牢逃脱(BFS)
题目描述 给定一个 n 行 m 列的地牢,其中 ‘.’ 表示可以通行的位置,’X’ 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指定的步长遍历地牢,要求每一步都不可以超过地牢的边界,也不能到达障碍上。地牢的出口可能在任意某个可以通行的位置上。牛牛想知道最坏情况下,他需要多少步才可以离开这个地牢。 输入描述: 每个输入包含
2017-08-23 11:32:31
198
原创 合唱团
题目描述 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 输入描述: 每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值
2017-08-19 18:08:19
194
原创 Spring源码分析-beanFactory
AliasRegistry:定义了对别名的简单增删改操作public interface AliasRegistry { void registerAlias(String var1, String var2); void removeAlias(String var1); boolean isAlias(String var1); String[] getAliases(
2017-08-13 15:52:10
377
原创 迷宫问题
1.问题描述: 小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫。为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了这个位置;1代表小青蛙可以达到的位置。小青蛙初始在(0,0)位置,地下迷宫的出口在(0,m-1)(保证这两个位置都是1,并且保证一定有起点到终点可达的路径),小青蛙在迷宫中水平移动一个单位距
2017-08-08 17:29:58
810
原创 数组中求俩个数,三个数,K个数和为给定sum
给定一个数组,一个数sum,在数组中快速找到俩个数和为sum。 给定一个数组,一个数sum,在数组中快速找到三个数和为sum。 给定一个数组,一个数sum,求数组中可以找到多少种组合使得和为sum。不限制组合里面数的个数。package com.liu.common;/** * Created by kaizige on 2017/8/5. */import java.util.*;pu
2017-08-08 14:30:22
3277
原创 自定义类的比较
1.题目介绍: 某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大 2.输入描述: 输入包括m+2行。 第一行两个整数n(1 <= n <= 50000),m(1 <= m <= 50000) 第二行为n个参数a,即每个桌子可容纳的最大人数,
2017-08-08 09:41:31
422
原创 Semaphore
1.类声明:public class Semaphore implements java.io.Serializable {}2.变量://同步器,用来实现Semaphoreprivate final Sync sync;3.方法://自定义同步器 abstract static class Sync extends AbstractQueuedSynchronizer { p
2017-08-07 16:03:10
193
原创 CyclicBarrier
1.类声明://使一组线程互相等待,直到所有线程都到达了,才放行所有阻塞的线程。用了分代思想,只用初始化一次,parties会不变,count到达0时放行。public class CyclicBarrier{}2.变量://所有的参与者,需要等待的线程数量 private final int parties; //还需要等待的线程数量 private int count; //放
2017-08-07 15:46:17
157
原创 CountDownLatch
1.类声明://需要等待某个条件完成,即等待其他某些线程完成操作,才能继续执行的时候,可以使用此类。在计数器到达0之前,await方法会一直阻塞public class CountDownLatch{}2.变量://同步器 private final Sync sync;3.方法://初始化 public CountDownLatch(int count) { if (c
2017-08-07 15:26:01
165
原创 ArrayBlockingQueue
1.类声明:public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable {}2.变量://final引用,底层数组不能改变指向 final Object[] items; //锁 final ReentrantLock
2017-08-07 14:38:34
202
原创 CopyOnWriteArrayList
1.类声明://写时复制容器。可以进行并发的读,不需要加锁,写的时候拷贝一份进行写,写完将原来的容器指向新的容器,写的时候要加锁。不能保证数据的实时一致性,只能保证最终一致性。public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {2.变量
2017-08-07 14:02:03
180
原创 TreeMap
1.类声明://可排序的map,基于红黑树的NavigableMap实现,可以根据键的自然顺序(键可以实现Comparable接口排序)进行排序,也可以根据传入的Comparator进行排序,有Comparator时Comparator优先。public class TreeMap<K,V> extends AbstractMap<K,V> implements Navigable
2017-08-07 13:32:03
138
原创 WeakHashMap
1.类声明://key是保存在在WeakReference中的,因此若是key只在这个WeakReference中有引用,那么在下一次垃圾回收的时候就会将key进行回收,同时将这个WeakReference放到ReferenceQueue中。public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K
2017-08-07 13:03:57
130
原创 LinkedHashMap
1.类声明://使用Hash表和双向列表存放数据public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{}2.变量://继承HashMap的节点同时增加前后节点属性 static class Entry<K,V> extends HashMap.Node<K,V> { En
2017-08-07 12:17:41
200
原创 HashMap(jdk1.8)
参考文章:1.http://blog.csdn.net/fan2012huan/article/details/51097331 1.类声明:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {}2.变量://默认初始化容量 static f
2017-08-06 11:56:51
155
原创 String
1.类声明:public final class String implements java.io.Serializable, Comparable<String>, CharSequence {}2.变量:private final char value[];//存储字符串public static final Comparator<String> CASE_INSENSITIVE_O
2017-08-05 13:42:59
144
原创 Integer
类声明:public final class Integer extends Number implements Comparable {} 方法: 1.将一个整数转为2到36中的一个进制的静态方法: public static String toString(int i, int radix) { if (radix < Character.MIN_RADIX || r
2017-08-05 10:56:59
209
原创 字典树解决句子相似性问题
【问题描述】给定一个段落,由 N 个句子组成。第 i 个句子的长度为 L[i],包含的单词个数为 W[i]。 句子不包含任何除字母和空格( ) 外的符号。 每个句子内部,含有若干个单词,由空格( ) 分隔。句子不会包含连续的空格。 随后给定 M 个查询,每个查询包含一个句子,需要在段落中寻找相同单词数量最多的句子。重复的单词只计一次,且不区分大小写。 输入数据将保证结果是存在且唯一的。 输
2017-08-04 17:22:53
261
原创 Trie树解决字典中查找单词问题
package com.kai.util;import java.util.HashSet;/** * Created by Administrator on 2017/8/4. */public class TrieTree { Node root=new Node(); private class Node{ private Node[] child=ne
2017-08-04 12:50:51
195
原创 java8 lamda表达式
lamda表达式的引入主要是为了解决匿名内部类的问题,比如: public interface func{ public void method();}当我们有一个对象要调用func的方法,且func的对象只会在此处用一次,我们会这么写个匿名类: funcService.service(new func(){ public void method(){
2017-07-05 18:24:10
460
原创 ServletRequest
Web开发处理流程:用户输入网址,把用户请求发送给服务器,经过负载均衡后到达应用服务器(比如Tomcat),返回静态页面,或者是动态页面(由Servlet实现)。 Servlet主要完成:Web服务器将请求交给相应的容器来处理,当容器发现是对Servlet请求后,容器会创建俩个对象:HttpServletRequest和HttpServletResponse,将它们传给Servlet处理,再把返回
2017-07-04 13:56:12
235
原创 避免创建不必要的对象
1.尽量少使用 String s=new String(“hello”);多使用String s=”hello”; 2.优先使用静态工厂方法而不是构造器; 3.静态代码块的运用:在类加载的时候运行一次,对象可以在里面创建从而避免创建过多对象。 4.优先使用基本类型而不是包装类型。 public static void main(String[] args) { Long
2017-07-04 10:39:37
173
原创 单元素的枚举类型实现单例
/** * Created by kaizige on 2017/7/4. */public enum Singleton { INSTANCE("yangkai"); private String name; Singleton(String name){ this.name = name; } public String getN
2017-07-04 10:11:39
224
原创 利用有限通配符提供API灵活性
import com.sun.org.apache.xerces.internal.impl.dv.dtd.NMTOKENDatatypeValidator;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;/** * Created by kaizige on 2017/7/3.
2017-07-04 09:30:53
241
原创 优先考虑泛型方法
import java.util.*;/** * Created by kaizige on 2017/7/4. */public class FunctionFactory { public static <E> Set<E> union(Set<E> s1, Set<E> s2){ Set<E> r=new HashSet<E>(s1); r.add
2017-07-04 07:17:05
387
原创 优先考虑泛型
import java.util.Objects;/** * Created by kaizige on 2017/7/3. */public class Stack { private Object[] eles; private int size=0; private static final int CAPATY=10; public Stack(){
2017-07-03 23:23:21
188
原创 遇到多个构造器参数时要考虑用构建器
1.当一个类有很多参数,其中一些是必须的,一些是可选的时候,使用构建器清晰明了: 下面的类可以修改为构造器/** * Created by kaizige on 2017/7/3. */public class Person { private int age;//必须 private String name;//必须 private String sex;//必须
2017-07-03 22:22:42
165
原创 用静态工厂方法代替构造器
优势: 1.不必每次调用的时候创建新对象,可以返回原返回类型的子类型,有名称更容易阅读。/** * Created by kaizige on 2017/7/3. */public interface Service { public void doService();}/** * Created by kaizige on 2017/7/3. */public class
2017-07-03 21:48:21
222
原创 数据访问层
给数据库减压:1:优化应用,看是否有不必要的压力;2:看有没有办法降低数据库压力,如缓存,搜索引擎等;3:将数据库的数据和访问分到多台数据库上,分开支持。数据拆分有俩种方式:垂直拆分和水平拆分 垂直拆分带来的影响: 单机的ACID被打破了,要么放弃原来的事务,要么引入分布式事务; Join操作变的比较困难 靠外键约束的场景会收影响
2017-06-30 17:37:49
298
原创 服务框架
为什么使用服务框架:应用直接访问底层的服务(数据库,缓存,分布式文件系统,搜索引擎等)足够解决问题,比如商品模块访问底层服务,交易模块访问底层服务,它们都会用到用户相关的功能,会有很多代码冗余且不利于管理。在应用和底层间添加服务,可以使结构更为清晰,提高稳定性,避免代码冗余。服务框架的设计和实现: 本地调用变为远程调用:服务框架客户端从上到下依次为:接口调用,寻址路由,编码,通信,服务端从
2017-06-30 14:59:35
978
原创 构建java中间件
中间件:中间件起到的是桥梁作用,是应用与应用之间的桥梁, 也是应用与服务之间的桥梁,特定的中间件用来解决特定的问题。 远程过程调用和对象访问中间件:解决分布式环境下应用的互相访问问题,是应用服务化的基础。 消息中间件:解决应用间的消息传递,解耦,异步的问题。 数据访问中间件:解决应用访问数据库的共性问题。中间件基础: JVM调优与运行时问题的处理 垃
2017-06-30 13:58:04
394
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人