- 博客(32)
- 收藏
- 关注
原创 Java并发编程基础---(2)线程通信机制
写在前面: 线程之间如果一直处于独立运行,并不会为我们的项目带来多大的价值,如果线程之间一直保持通信,则会带来巨大的的价值,而这篇博客将总结 volatile 和 synchronized 这两个维护线程之间通信的关键字。 volatile关键字 volatile用于修饰字段(成员变量),volatile的使用就是告诉线程对变量的访问,必须从共享内存中获取,而不会利用缓存,而且对...
2018-02-28 23:14:51 176
原创 Spring学习---(5)注解方式实现Spring声明式事务管理
写在前面: 由于底层事务管理就是使用了AOP,所以说Spring声明式事务管理也分为XML实现和注解方式实现,在上一篇博客中为大家接收了XML方式(链接:http://blog.csdn.net/may_3/article/details/79402541),这篇博客,将完善一下Spring声明式事务管理的另一种方式。注解方式的实现步骤: (1)引入相关Jar文件 (2)在bea...
2018-02-28 18:37:16 207
原创 Spring学习---(4)XML方式实现Spring声明式事务管理
写在前面: Spring的声明式事务管理有两种方式,一种是XML配置,一种是注解方式。这也是由于Spring的事务管理底层是AOP实现,即写一次,在运行时,动态植入业务方法中。(AOP编程参考:http://blog.csdn.net/may_3/article/details/79396729)事务控制: (1)编程式事务控制:自己手动的控制事务,可以例如:在JDBC中,设置手动控制...
2018-02-28 18:04:45 309
原创 Spring学习---(3)切入点表达式语法
写在前面: 这篇博客中,将会总结一些AOP中常用的切入点表达式及语法。示例代码1<aop:pointcut expression="execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) " id=""/> 这行代码中, (1)m...
2018-02-28 11:19:35 329
原创 Spring学习---(2)XML方式实现AOP编程
写在前面: 在上一篇博客中,为大家总结了注解方式方式实现AOP编程步骤,原理等,在这篇博客中会为大家总结AOP编程的第二种方式,XML方式,建议小伙伴们如果没有基础的化,将我的上一篇博客仔细看一遍,手敲一遍dem,加深一下理解,这样再来看这篇博客会更容易理解。(附上链接:http://blog.csdn.net/May_3/article/details/79395196)XML方式实现AO...
2018-02-28 10:13:22 213
原创 Spring学习---(1)注解方式实现AOP编程
写在前面: 首先,我们在编程语言学习的时候,了解过C语言是一种面向过程编程,C++,Java是面向对象编程,而AOP则是面向切面编程。AOP编程概念及步骤: AOP:Aspect object programming,面向切面编程,是指在运行时期,执行核心业务代码时,通过动态代理或Cglib代理的方式,植入关注点代码。AOP是OOP的延续。 关注点代码:就是指程序中可以复用的代码...
2018-02-28 08:48:03 244
原创 Java并发编程基础---(1)线程基础及线程调度
写在前面: Java的并发编程是Java语言很重要的一部分,最近自己在读《Java并发编程的艺术》这本书,所以会根据书中的内容,对Java并发编程的基础,深入等知识点,进行总结,梳理,希望会对大家的学习有所帮助。线程: 线程是操作系统调度的最小单元。启动一个Java程序,就会创建一个Java进程,在这个Java进程中,可以有多个线程,线程之间独享自己的计数器,栈,和局部变量等属性。此时...
2018-02-27 23:02:14 318
原创 Servlet 生命周期,工作原理
什么是Servlet: 从狭义上看,Servlet是指Servlet接口,而从广义上看,Servlet是指所有实现了Servlet接口的类。所以,我们可以认为,Servlet是运行在服务器端的小程序,作为(MVC中的C),也就是控制器,用于处理及响应客户端的请求。Servlet类的继承和实现: 在查看Java Api后,我们发现,我们自己编写的Servlet类,首先会继承与HttpSe...
2018-02-26 23:07:38 227
原创 剑指offer--(20)序列化二叉树--Java描述
写在前面: 二叉树的序列化:在前序遍历的基础上,将二叉树的结点遍历成一个字符串 二叉树的反序列化:在前序遍历的基础上,将一个字符串还原成一颗二叉树注意:(1)空指针null,序列化成一个特殊字符"#"(2)相邻结点间的值,用","相隔,这样在反序列化时,就可以通过","来分割出一个数组(3)定义一个index,初始化为-1,在反序列化时,记录数组的索引。代码实现: public cla...
2018-02-25 15:46:16 153
原创 剑指offer--(19)二叉树的下一个结点--Java描述
写在前面: 这道问题,由于是中序遍历,我们需要考虑以下几种情况: (1)root=null,那么直接返回null (2)如果node有右子树,那么就从node的右子树开始寻找,一直找到node的右子树的最左结点,即为node中序遍历的下一个结点。 (3)如果node没有右子树,那么就找node的父结点的left,是否等于node,如果等于node,就返回这个父亲结点,不等于...
2018-02-25 13:23:56 169
原创 剑指offer--(18)删除链表中重复的结点--Java描述
写在前面: 删除链表中重复的结点,我们需要考虑两种重复的情况:(1)从head就开始重复 eg:{1,1,2,2,3}(2)正常重复 eg:{1,2,2,3,3,5}那么为了避免第一种情况出现,程序没有删除头结点,我们需要自己创建一个头结点: ListNode first = new ListNode(-1);// 新建一个头节点,避免,从head就开始重复此外,我们还要用一个start...
2018-02-25 11:40:51 179
原创 剑指offer--(17)按之字形顺序打印二叉树--Java描述
写在前面: 首先,我们需要知道,按之字形顺序打印的规律,即: (1)第一行,也就是根节点,按从左至右打印-----奇数行 (2)第二行,也就是根节点的左子树,右子树,按从右至左打印-----偶数行依次类推,这样我们就找到了规律,我们定义一个int layer记录层数,定义两个栈 Stack1 记录奇数行的结点,Stack2 记录偶数行的结点。 代码实现: pu...
2018-02-24 23:00:51 271
原创 剑指offer--(16)对称的二叉树--Java描述
写在前面: 判断二叉树是否为对称的标准是:源二叉树是否等于二叉树的镜像 对称二叉树的特点是:(好绕嘴啊)(1)根节点的左子树等于右子树,或左子树右子树都为空(2)左子树的左子树等于右子树的左子树(3)左子树的右子树等于右子树的左子树如图所示:左边的是对称二叉树,而右边的不是。代码实现:boolean isSymmetrical(TreeNode root) { // 根节点的左子树...
2018-02-24 21:37:03 206
原创 剑指offer--(15)构建乘积数组--Java描述
写在前面: 这道题,我们首先要掌握乘积的规律(1)B[0] = A[1] * A[2] * A[3] * A[4] *....*A[n-1] ;(没有A[0])(2)B[1] = A[0] * A[2] * A[3] * A[4] *....*A[n-1] ;(没有A[1])(3)B[2] = A[0] * A[1] * A[3] * A[4] *....*A[n-1] ;(没有A[2]) ...
2018-02-24 18:21:53 159
原创 剑指offer--(14)数组中重复的数字--Java描述
写在前面: 这道题,我们首先要注意的就是数组numbers中的数字在0-n-1之间,我们就可以利用这个特点,建立一个辅助的数组hash,数组长度为n,也就是说: (1)hash数组的下标,就可以用来记录numbers的元素,0-n-1。 (2)hash数组的下标对应的值,就可以用来记录numbers的元素出现的次数。注意: 因为这道题,只要找出一个重复的元素就可以,不要求这...
2018-02-24 16:57:12 200
原创 剑指offer--(13)不要加减乘除做加法--Java描述
写在前面: 首先这道问题,不允许使用加减乘除,那么我们首先想到的就应该是位运算以及移位运算。移位运算:(1)<<左移运算符,eg:num<<1相当于num*2(2)>>右移运算符,eg:num>>1相当于num/2(3)>>>无符号位右移运算符,eg:num>>>1,忽略符号位,空位都以0补齐位运算:(1)位
2018-02-24 15:29:07 149
原创 剑指offer--(12)孩子们的游戏(圆圈中最后剩下的数)--Java描述
写在前面: 首先,当我们看到题目,孩子们围成一个圆圈的时候,我们首先可以想到循环链表,用一个链表来模拟孩子们的位置,定义一个location来记录被删除节点的位置,从list中删除索引为location的元素,最后list中剩下的元素,就是获奖的索引。注意: (1)while循环的条件是:list.size()>1 (2)location的值要不断累加,因为每次报数是从上一...
2018-02-24 12:19:21 210
原创 剑指offer--(11)左旋转字符串--Java描述
写在前面: 这道问题与上一篇博客类似,大家可以先参考一下(http://blog.csdn.net/may_3/article/details/79358590),那么这道问题的解题思路是,将整个字符串分为两部分: 第一部分:前k个字符(也就是要左移的字符串),第二部分:后面的所有字符。代码实现: public String LeftRotateString(String str,...
2018-02-24 11:40:05 211
原创 剑指offer--(10)翻转单词顺序列--Java描述
写在前面: 题目的要求为:将输入字符串为"I am a Student.",转换输出为"Student. a am I". 那么这道题的思路是: (1)翻转整个字符串,得到".tneduts a ma I" (2)翻转每一个单词,得到“student. a am I"接下来,我们看一下他的代码实现: public String ReverseSentence(String...
2018-02-24 11:02:34 412
原创 剑指offer--(9)扑克牌顺子--Java描述
写在前面: 注意:题目规定了,大小王看作是0.题目的关键点在于:(1)记录手中扑克牌大小王(也就是0)的数量(2)记录手中扑克牌中,相邻两张牌的间隔,如果间隔>大小王的数量,则直接return false.(3)记录手中扑克牌是否有对(即是否有相同的牌),如果有对,则直接return false.代码实现:package test7;import java.util.Arrays;...
2018-02-23 23:00:29 197
原创 剑指offer--(8)和为S的两个数字--Java描述
写在前面: 有了上一篇文章的基础(链接:http://blog.csdn.net/may_3/article/details/79357223),我们再来看这道题目就会简单很多。同样是要设置两个指针start记录两个数中较小数的索引,和end记录两个数中较大数的索引。 (1)array[start]+array[end]==sum时,保存到list中。 (2)array[s...
2018-02-23 22:34:01 189
原创 剑指offer--(7)和为S的连续整数序列--Java描述
写在前面: 这个问题的基本思路是,定义两个指针,指针small指向序列的最小值,big指向序列的最大值。设置一个初始值current=small+big。 (1)当current<sum的时候,我们要增加big的值。 (2)当current>sum的时候,我们要增加small的值。注意:最外层循环while的条件是small值的大小,由于至少为两个值,所以small&...
2018-02-23 21:50:51 260
原创 剑指offer--(6)平衡二叉树--Java描述
写在前面: 平衡二叉树(AVL树)首先是一个二叉搜索树,他的特点是:(1)平衡二叉树可以是一颗空树或左右子树的高度差的绝对值(2)他的左子树和右子树也都是平衡二叉树代码实现:boolean isBalanced = true; public boolean IsBalanced_Solution(TreeNode root) { if (root == null) { re...
2018-02-23 19:48:10 231
原创 剑指offer--(5)数字在排序数组中出现的次数--Java描述
写在前面: 首先,这道问题,当我们看到"排序数组"这四个字的时候,我们首先想到的应该是使用二分法,但是传统的二分法,只能让我们找到一个索引,当数组中出现多个相同元素的时候,返回的索引不确定。eg:int [] str=new int [] {3,3,3}; 而我们,为了找到数字出现的次数,就要找到这个数字第一个出现的索引firstKey和最后一次出现的索引lastKey,最后的结果=last...
2018-02-23 17:56:45 136
原创 剑指offer--(4)把数组排成最小的数--Java描述
写在前面: 这到问题,本身解决起来,比较容易,但是由这道题,我们可以重温一下java基础中,Comparator接口,Arrays类以及String类的一些方法。 我们先来看一下代码实现:import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;public class Solut...
2018-02-23 17:50:24 169
原创 剑指offer--(3)树的子结构--Java描述
写在前面: 这个问题的关键在于,从root1开始寻找,第一个相同的根节点,找到之后调用自定义的函数,来遍历,判断是否是子结构。Java代码实现如下:public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { boolean flag=false; ...
2018-02-21 11:27:35 164
原创 剑指offer--(2)跳台阶--Java描述
写在前面: 题目:一只青蛙一次可以跳上1级台阶,也可以一次跳上2级台阶,求青蛙跳上n级台阶有多少种跳法首先:这个问题我们需要理解一个思路就是,当青蛙跳上第n级台阶的时候,他有可以有2种方式 第一种:从n-1阶跳1步,到第n级。 第二种:从n-2级跳2步,到第n级。所以说当我们知道 从0到n-1阶的跳法+从0到n-2阶的跳法之后,我们就知道了从0到第n阶的跳法总数。我们可以总结出公...
2018-02-17 12:24:35 202
原创 数据结构---(四)二叉树---Java描述
写在前面:二叉树(Binary Tree)特点:每个结点至多有两棵子树(即二叉树中不存在度大于2的结点),且二叉树的子树有左右之分,左子树和右子树不可颠倒。二叉树的相关操作:--遍历:(N:Node L:LeftSubTree R:RightSubTree)遍历其实是将二叉树每一个结点按照线性排列的过程。前序遍历:NLR--根左右中序遍历:LNR--左根右后序遍历:LRN--左右根举例:比如中...
2018-02-16 19:31:20 211
原创 栈的输出序列
写在前面: 有很多同学刚开始读题的时候,可能不太理解题意,觉得只能有一种答案{ E,D,C,B,A } 。但是题的关键在于栈的输入序列这几个字,实际上是指按这个顺序输入,但是入栈的过程中,也可以出栈(即可以边入栈,边出栈)。详细解析如下:Q:如果栈的输入序列为{A,B,C,D,E},则他的输出序列不可能是:A:(A)输出序列{ A,B,C,D,E }选项(1)的方式为:A入栈,A出栈,B入栈...
2018-02-16 18:47:17 10673 1
原创 剑指offer--(1)连续子数组的最大和--Java描述
写在前面: 使用动态规划求解 F(i)=以array[I]为末尾元素的子数组的和的最大值。 公式:F(i)=max( F(i-1) + array[i] , array[i] ) 设res=所有子数组的和的最大值。res=max( res , F(i)) 例如: 数组为:【6,-3,-2,7,-15,1,2,2】 初始状态:i=0时 F(0)=6 r...
2018-02-14 23:08:42 158
原创 数据结构---(二)堆、栈、队列---Java描述
写在前面: 栈(Stack):是一种只能在一端,进行插入和删除操作的特殊线性表,分为顺序栈和链式栈。 堆(Heap):堆是一种数组对象,他可以被视为一颗完全二叉树结构,所以,堆又称为二叉堆。 队列(Queue):一般分为顺序队列,链式队列和循环队列。(一)栈 由于栈的特点是:只能在一段进行插入和删除操作。 特点:先进后出结构(LIFO:Last In First O...
2018-02-09 22:19:56 207
原创 数据结构---(一)线性表---Java描述
写在前面: 线性表的根据其存储结构可以划分为为:顺序表和链式表,而链式表又可以划分为单向链表,双向链表,以及循环链表。1.顺序表特点:数据元素的存储是连续的,在内存中划分的区域也是连续的。优点:查询某个位置的数据快缺点:添加,删除某个元素,需要移动其他元素的位置,且当线性表容量到达最大时,需要扩容下面来看代码实现:定义一个接口---IListDemo1一个实现类---ListDemo1接口代码如下...
2018-02-08 09:36:28 192
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人