- 博客(76)
- 收藏
- 关注
原创 8.Java容器-Set详解
本文主要讲Set的三个子类: HashSet:底层数据结构是哈希表(是一个元素为链表的数组) + 红黑树; TreeSet集合:1.底层数据结构是红黑树(是一个自平衡的二叉树);2.保证元素的排序方式; LinkedHashSet集合:底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成;HashSet 1.实现Set接口; ...
2018-05-29 11:00:33 1939
原创 6.Java容器-TreeMap
概述 1.非同步; 2.TreeMap实现了NavigableMap接口,而NavigableMap接口继承着SortedMap接口,所以TreeMap是有序的; 3.TreeMap底层是红黑树,它方法的时间复杂度都不会太高:log(n); 4.TreeMap的构造器可以接受一个Comparator参数用以决定key的顺序,如果没有指定,那么尝试将key强转为C...
2018-05-28 20:39:52 1260
原创 5.Java容器-LinkedHashMap
LinkedHashMap概述 LinkedHashMap是HashMap的子类,内部使用双向链表进行顺序的维护,内部类Entry为HashMap的Node的子类; 底层是散列表和双向链表,插入的顺序是有序的(底层链表致使有序),和HashMap一样,允许key和value为null,初始容量和装载因子对LinkedHashMap的性能影响很大;也是非同步的,也可以调用Co...
2018-05-28 17:09:43 1302
原创 10.Java永久代去哪了
在Java虚拟机中,类包含了其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表; 在过去(当自定义类加载器使用地不是很普遍的时候),类几乎是静态的,并且很少被卸载和回收;因此类可以被看做是“永久的”;另外由于类作为JVM实现的一部分,它们不由程序来创建,因此它们也被认为是“非堆”的内存; 在JDK...
2018-05-16 17:04:10 1926
原创 7.Java容器-ConcurrentHashMap
前言线程不安全的HashMap 在多线程环境下,HashMap的put操作可能会引起死循环,导致CPU利用率接近100%; 因为多线程可能会导致HashMap的Entry链表在扩容的时候,形成环形数据结构,这样,Entry的next节点永远不为空,获取Entry的时候就会产生死循环;效率低下的HashTable和Collections.synchronizedM...
2018-05-15 14:52:22 1233
原创 7.Spring MVC处理请求的过程
本文将分析Spring MVC是如何处理请求的; 首先,分析HttpServletBean,FrameworkServlet和DispatcherServlet这三个Servlet的处理过程; 这样大家就可以明白从Servlet容器将请求交给Spring MVC一直到DispatcherServlet具体处理请求之前都做了什么; 最后再重点分析Sp...
2018-05-13 21:58:45 3554
原创 97.交错字符串(Interleaving String)
题目描述给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true示例 2:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出: false解题思路...
2018-05-31 21:15:02 2830
原创 98.验证二叉搜索树(Validate Binary Search Tree)
题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释...
2018-05-30 22:00:15 1215
原创 MyBatis概述
配置MyBatis最常用的是XML形式进行配置,还可以使用Spring Bean的方式进行配置。另外还可以通过Java编码的方式进行配置,但Java编码的方式不太常用; 使用XML配置:首先在src/main/resources下面创建mybatis-config.xml配置文件;...
2018-05-30 08:58:57 1216
原创 99.恢复二叉搜索树(Recover Binary Search Tree)
题目描述 二叉搜索树中的两个节点被错误地交换;请在不改变其结构的情况下,恢复这棵树; 示例 1:输入: [1,3,null,null,2] 1 / 3 \ 2输出: [3,1,null,null,2] 3 / 1 \ 2 示例 2:输入: [3,1,4,null,null,2] 3 / \1 4 ...
2018-05-28 22:38:10 1827
原创 锁
一方面要最大程度地利用数据库的并发访问,另一方面还要确保每个用户能一一致的方式读取和修改数据,这就有了锁的机制;本文将详细介绍InnoDB存储引擎对表中数据的锁定,同时分析InnoDB存储引擎会以怎么的粒度锁定数据; 人们认为行级锁总会增加开销,实际上,只有当实现本身会增加开销时,行级锁才会增加开销;InnoDB存储引擎不需要锁升级,因为一个锁和多个锁的开销是相同的;什么...
2018-05-26 17:03:50 1104
原创 20.包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。解题思路 private int size; private int min = Integer.MAX_VALUE; private Stack<Integer> minStack = new Stack<Integer>(); private Int...
2018-05-26 10:28:08 1089
原创 19.顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路 public ArrayList<Integer> printMatrix(int[][] ...
2018-05-26 10:28:03 1169
原创 18.二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像;输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...
2018-05-26 10:27:59 1128
原创 17.树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路 private class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int ...
2018-05-26 10:27:52 1068
原创 16.合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路 private class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; ...
2018-05-26 10:27:45 1133
原创 15.反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素。解题思路 private class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public s...
2018-05-25 21:39:51 1126
原创 14.链表中倒数第k个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点。解题思路 private class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public Li...
2018-05-25 21:36:14 1209
原创 13.调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路 public void reOrderArray(int [] array) { if (array.length <= 1) { return;...
2018-05-25 21:33:36 1119
原创 12.数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方解题思路public double Power(double base, int exponent) { if (exponent == 0) { return 1; } int n=Math.ab...
2018-05-25 21:29:34 1098
原创 11.二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路public static int NumberOf1(int n) { char[] array = Integer.toBinaryString(n).toCharArray(); int result = 0; for(int i=0;i<arr...
2018-05-25 21:27:00 1158
原创 10.矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路public static int RectCover(int target) { if (target < 1) { return 0; }else if (target == ...
2018-05-25 21:24:43 1100
原创 09.变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路 public int JumpFloorII(int target) { // return (int)Math.pow(2, target-1); return 1<<(target-1); }...
2018-05-25 21:22:00 1134
原创 08.跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路 public int JumpFloor(int target) { if (target >= 2) { return JumpFloor(target-1)+JumpFloor(target-2); }els...
2018-05-25 21:17:48 1105
原创 总结
本文首先总结一下Spring MVC的运行原理,然后通过实际跟踪一个请求来回顾整个处理过程;Spring MVC原理总结 Spring MVC本质上是一个Servlet,Servlet的运行需要一个Servlet容器,如Tomcat; Tomcat可以分为两部分:连接器和容器;连接器专门用于处理网络连接相关的事情,如Socket连接,request封装,连接线...
2018-05-25 17:03:59 1113
原创 9.Spring MVC重要组件-HandlerMapping
从上图可以看出,HandlerMapping的继承结构分为两支,一支继承自AbstractHandlerMethodMapping,另一之继承自AbstractUrlHandlerMapping,而这两支都继承自抽象类AbstractHandlerMapping;所以,我们先分析AbstractHandlerMapping,然后再分析AbstractHandlerMethodMapp...
2018-05-25 10:54:22 1127
原创 8.Spring MVC重要组件概述
这里说的组件指的是DispatcherServlet中直接初始化的那9个组件;HandlerMapping HandlerMapping的作用是根据request找到相应的处理器Handler和Interceptors; HandlerMapping接口里面只有一个方法,方法的实现非常灵活,只要使用Request返回HandlerExecutionChain即...
2018-05-24 15:25:05 1332
原创 07.斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39解题思路 public int Fibonacci(int n) { if (n<=0) { return 0; }else if (n<3) { return 1; }else { return Fibonacci(n-1)+Fibo...
2018-05-23 14:11:23 1156
原创 06.旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路 public int minNumberInRotateArray(int [] a...
2018-05-23 14:08:57 1117
原创 05.用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路 Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void pu...
2018-05-23 14:05:41 1096
原创 04.重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路 private class TreeNode { int val; TreeNode left...
2018-05-23 14:00:43 1082
原创 03.从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值;解题思路 private class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public Ar...
2018-05-23 13:57:39 1117
原创 02.替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy;解题思路public String replaceSpace(StringBuffer str) { for(int i=0;i<str.length();i++) { if (str.cha...
2018-05-22 22:21:34 1146
原创 深入理解Session与Cookie
理解Cookie 当一个用户通过HTTP访问一个服务器时,服务器会将一些Key/Value键值对返回给客户端浏览器,并给这些数据加上一些限制条件;在条件符合时,这个用户再次访问这个服务器时,数据又被完整地带回给服务器; 好比,你去超市购物,第一次给你办了张购物卡,在这张购物卡上存放了你的个人信息,下次再来购物的时候,超市会识别你的购物卡,直接购物即可; 当初设计...
2018-05-21 22:27:24 1226
原创 7.TCP连接的建立与终止
TCP是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接;建立TCP连接1.请求端发送一个SYN段(即报文段1)指明打算连接的服务器的端口号,以及初始序号(ISN,在这里是1415531521);2.服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答;同时,将确认序号设置为客户的ISN+1,以对客户端的SYN报文段进行确认;3.客户必须...
2018-05-21 19:40:22 1077
原创 计算机操作系统
概述操作系统基本特征并发 并发性是指宏观上在一段时间内能同时运行多个程序,而并行性则指同一时刻能运行多个指令; 并行需要硬件支持,如多流水线或者多处理器; 操作系统通过引入进程和线程,使得程序能够并发运行;共享 共享是指系统中的资源可以供多个并发进程共同使用; 有两种共享方式:互斥共享和同时共享; 互斥共享的资源称为临界资...
2018-05-21 19:40:04 1101
原创 进程和线程
进程是对正在运行的程序的一个抽象;顺序进程(简称,进程)。进程进程模型 一个进程就是一个正在执行的程序的实例,包括程序计数器,寄存器和变量的当前值; 假设只有一个CPU,那么就只有一个物理程序计数器,每个进程被执行时,进程的程序计数器被装入物理程序计数器,执行结束(或暂停)时,物理程序计数器被保存在该进程的程序计数器中(在内存中);创建进程 有4种情况下,会去创建进...
2018-05-21 19:39:51 1116
原创 5.数据流Stream(一)
前言 Stream与Java IO的InputStream和OutputStream是完全不一样的,数据流Stream是单体(Monad),并在Java 8函数式编程起着重要的作用。 在函数式编程中,单体是一种结构,表示为步骤序列的计算过程。单体结构的类型与它对链式操作,或嵌套函数的含义相关。...
2018-05-21 19:39:26 1234
原创 2.实战:OutOfMemoryError(OOM)异常
前言 除了程序计数器外,虚拟机内存的其他运行时区域都有发生OutOfMemoryError(OOM)异常的可能; 本文工作分两部分:1.通过代码验证各个运行时区域存储的内容;2.遇到内存溢出异常的时候,如何根据异常的信息快速判断是哪个区域的内存溢出,知道什么样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处理;Java堆溢出 堆用来存储对象实例,只...
2018-05-21 19:39:10 1537
原创 2.Context的创建
Spring Boot的启动类@SpringBootApplication@ComponentScan(basePackages = {"com"})public class SpringSourceApplication { public static void main(String[] args) { ApplicationContext ctx = Spring...
2018-05-21 19:38:56 1084
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人