自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

To be a better man的博客

不驰于空想,不鹜于虚声,一步一个脚印,踏踏实实奋斗出幸福。

  • 博客(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关注的人

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