java
草莓味儿的小米佳
Man proposes,God disposes.
展开
-
tomcat是什么?
Tomcat是web容器。在进行web项目开发的时候,经常需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索,那么百度服务器如何处理这个请求呢?它需要创建servlet来处理,servlet其实就是java程序,只是在服务器端的java程序,servlet通过配置文件拦截你的请求,并进行相应处理,然后展示给你相应界面。那么servlet如何创建?这时候就要用到tomcat了。这就是tomcat的意义!tomcat是一个中间件,在B/S架构中,浏览器发出的http请求经过tomcat中间件原创 2020-11-12 21:15:51 · 2243 阅读 · 0 评论 -
Spring 中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?
Spring 中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?@NotNull://CharSequence, Collection, Map 和 Array 对象不能是 null, 但可以是空集(size = 0)。@NotEmpty://CharSequence, Collection, Map 和 Array 对象不能是 null 并且相关对象的 size 大于 0。@NotBlank://String 不能是 null 且去除两端空白字符后的长度(trimmed原创 2020-10-19 20:18:35 · 156 阅读 · 0 评论 -
@Aspect 注解使用详解
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。在spring AOP中业务逻辑仅仅只关注业务本身,将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑原创 2020-10-10 11:09:24 · 667 阅读 · 0 评论 -
Redis分布式锁的原理以及如何续期
Question:Redis锁的过期时间小于业务的执行时间该如何续期?Answer:只要客户端一旦加锁成功,就会启动一个watch dog看门狗,他是一个后台线程,会每隔10秒检查一下,如果客户端还持有锁key,那么就会不断的延长锁key的生存时间。默认情况下,加锁的时间是30秒,.如果加锁的业务没有执行完,那么到 30-10 = 20秒的时候,就会进行一次续期,把锁重置成30秒.那这个时候可能又有同学问了,那业务的机器万一宕机了呢?宕机了定时任务跑不了,就续不了期,那自然30秒之后锁就解开了呗.原创 2020-09-27 18:52:41 · 963 阅读 · 0 评论 -
如何理解java中的MVC?
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。M(Model):模型,普遍叫做业务逻辑层,一般包名叫serviceV(View):视图C(Controller):控制器,连接V和M的桥梁,起控制调度的作用下图是一个MVC模式运行的javaweb示意图:当用户从浏览器发送请求后,相应的视图会接收到请求并且去到对应的控制层中匹配方法,此时控制层接收到信息后会去调用模型层中的业务逻辑方法,找到方法后调原创 2020-09-18 14:18:23 · 623 阅读 · 0 评论 -
java 8 lamda Stream的Collectors.toMap 参数
java 8 lamda Stream的Collectors.toMap 参数经常会用到 List 转 Map 操作,在过去我们可能使用的是 for 循环遍历的方式Collectors.toMap,它允许我们从流中创建一个新的映射。还有如何解决关键冲突和创建不同的映射实现定义类:// 简单对象 @Accessors(chain = true) // 链式方法 @lombok.Dataclass User { private String id; private String n原创 2020-09-07 18:23:20 · 5661 阅读 · 0 评论 -
JAVA 中的 Optional
从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但是 Optional 的意义显然不止于此。创建 Optional 实例@Test(expected = NoSu原创 2020-09-07 10:47:15 · 426 阅读 · 0 评论 -
CyclicBarrier
一、CyclicBarrier是什么?从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。它的作用就是会让所有线程都等待完成后才会继续下一步行动。举个例子,就像生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐厅规定必须等到所有人到齐之后才会让我们进去。这里的朋友们就是各个线程,餐厅就是 CyclicBarrier。在JUC包(在 Java 5.0 提供了java.util.concurrent(简称JUC)包)中为我们原创 2020-09-03 13:59:05 · 91 阅读 · 0 评论 -
Java的业务逻辑验证框架fluent-validator
FluentValidator简介FluentValidator是百度的一个开源验证插件,简单的说,它就是为了校验数据简单并且复用而存在的。通过这个插件,你可以对接收到的数据进行你所需要的校验,并且返回对应的错误信息,同时它还提供一些比较不错的显示错误的功能。在我们编写项目的时候,在controller中往往离不开对一些数据的校验。这里并不是说对于这些数据业务上面的校验,而是对这些数据进行空校验或者是长度校验等。有些时候校验可以省略,根据业务的需要进行调整,而多数情况下,服务端对客户端一直采用的是不信原创 2020-08-21 14:21:27 · 781 阅读 · 0 评论 -
java8语言新特性
java8语言新特性1.Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。2.方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。3.默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。4.新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。5.Stream API −新添加的Stream原创 2020-07-14 14:59:27 · 142 阅读 · 0 评论 -
ip地址的正则表达式
这里讲的是IPv4的地址格式,总长度 32位=4段*8位,每段之间用.分割, 每段都是0-255之间的十进制数值。将0-255用正则表达式表示,可以分成一下几块来分别考虑:IP地址格式可表示为:XXX.XXX.XXX.XXX,XXX取值范围是0-255,前三段加一个.重复了三次,在与最后一段合并及组成IP地址的完整格式。所以IP地址的正则表示法如下:((25[0-5]|2[0-4]\d|(...原创 2020-03-12 10:41:17 · 1244 阅读 · 0 评论 -
java抽象类和接口的区别
接口与类的区别和联系:联系:他们都不能实例化对象,都可以包含抽象方法,而且抽象方法必须被继承的类全部实现。抽象类: 包含抽象方法的类称为抽象类,主要是为了代码重用。接口:泛指供别人调用的方法或者函数,对行为抽象,是抽象方法的集合。我们定义了接口,还有实现它的实现类,这就是利用接口把定义方法和实现实现分开了。主要区别:1.接口是平时写代码中最常见的关键字之一,即interface,实现接口...原创 2020-03-11 14:08:37 · 108 阅读 · 0 评论 -
Java内存管理机制
Java内存管理机制对于 Java 程序员来说,在虚拟机的自动内存管理机制的帮助下,不再需要为每一个 new 操作去写配对的 delete/free 代码,而且不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过也正是因为 Java 程序员把内存控制权交给了 Java 虚拟机,一旦出现内存泄漏和溢出的问题,如果不了解虚拟机怎样使用内存的,那排查错误将会成为一项异常艰难的工作...原创 2020-02-14 19:30:15 · 917 阅读 · 0 评论 -
java中 String StringBuffer StringBulider的区别 详细 超全
String StringBuffer StringBulider的区别这三个类主要区别在两个方面,即运行速度和线程安全。 一、运行速度:在这方面运行速度快慢为:StringBuilder > StringBuffer > StringString最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一...原创 2019-03-27 13:15:21 · 200 阅读 · 0 评论 -
设计模式
设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与...原创 2019-04-14 22:24:32 · 84 阅读 · 0 评论 -
深入理解 java 枚举类型
java 枚举类有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便。枚举类型是Java 5中新增特性的一部分枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。声明枚举声明枚举时必须使用 en...原创 2019-07-10 01:30:57 · 129 阅读 · 0 评论 -
java 迭代器Iterator详解
java 迭代器Iterator详解迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。(一)Iterator在Collection接口中的使用。 虽然Collection接口的相关类实现了get()方法,但将Iterator用在它们身上仍然是合适的,下面以ArrayList为例,讨论...原创 2019-07-07 11:24:41 · 1012 阅读 · 0 评论 -
啰嗦的 java,简洁的 lombok
啰嗦的 java,简洁的 lombok一、lombok 是什么?lombok 是一个非常神奇的 java 类库,会利用注解自动生成 java Bean 中烦人的 Getter、Setting,还能自动生成 logger、ToString、HashCode、Builder 等 java特色的函数或是符合设计模式的函数,能够让你 java Bean 更简洁,更美观。以下代码:@Data@Al...原创 2019-08-22 23:25:08 · 247 阅读 · 0 评论 -
JAVA中的Synchronized用法
JAVA中的Synchronized用法简单介绍synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3. 修改一个静态的...原创 2019-08-28 16:32:09 · 112 阅读 · 1 评论 -
mysql数据库优化的几种方法
mysql数据库优化的几种方法1、选取最适用的字段属性MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)...原创 2019-08-28 16:37:27 · 216 阅读 · 0 评论 -
Java线程池实现原理详解
Java线程池实现原理详解原理概述其实java线程池的实现原理很简单,说白了就是一个线程集合workerSet和一个阻塞队列workQueue。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。workerSet中的线程会不断的从workQueue中获取线程然后执行。当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就取出来继续...原创 2019-09-02 16:53:20 · 96 阅读 · 0 评论 -
朴素模式匹配算法和KMP匹配算法 详细
朴素模式匹配算法和KMP匹配算法一、朴素模式假设我们要从主串S=”goodgoogle"中找到子串T=“google"的位置,步骤如下:i表示主串的当前位置下标,j表示子串的当前位置下标,如上图在第一轮比较(i=1开始)中j=4和i=4的位置不匹配,接下来就要指针回退,从i=2开始比较,如下:如此反复直到比较到 i =(主串长度-子串长度+1)的位置或者 j = 子串的长度 就退出比较...原创 2019-04-14 21:07:22 · 2551 阅读 · 3 评论 -
深入理解JVM----JVM内存模型
深入理解JVM----JVM内存模型1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。(3)JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运...原创 2019-04-14 19:01:37 · 197 阅读 · 0 评论 -
阿里巴巴java方向笔试题(出自牛客网)
阿里巴巴java方向笔试题1.以下程序输出结果是____class A{ public: A ():m_iVal(0){test();} virtual void func() { std::cout<<m_iVal<<‘ ’;} void test(){func();} public: int m_iVal;};cla...原创 2019-04-12 11:32:14 · 960 阅读 · 0 评论 -
[剑指offer]从尾到头打印链表 java实现
[剑指offer]从尾到头打印链表题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList正常代码:package offer;import java.util.ArrayList;import java.util.Stack;public class Offer_3 { public static void main(String[] args) { Li...原创 2019-03-28 22:24:13 · 130 阅读 · 0 评论 -
链表 java实现 超详细
链表 java实现 超详细目录:1、单链表的创建和遍历2、求单链表中节点的个数3、查找单链表中的倒数第k个结点(剑指offer,题15)4、查找单链表中的中间结点5、合并两个有序的单链表,合并之后的链表依然有序【出现频率高】(剑指offer,题17)6、单链表的反转【出现频率最高】(剑指offer,题16)7、从尾到头打印单链表(剑指offer,题5)8、判断单链表是否有环9、...原创 2019-03-28 12:17:13 · 1943 阅读 · 2 评论 -
java中字符数组 String StringBuffer之间的相互转换
java中字符数组 String StringBuffer之间的相互转换一、StringBuffer与String的相互转换1、将StringBuffer转换成String方法一:StringBuffer类成员toString函数可将其转换成String类型。StringBuffer buffer = newStringBuffer(“abcd”);String str = buffer...原创 2019-03-27 13:34:23 · 2083 阅读 · 0 评论 -
【剑指offer】替换空格 java实现
【剑指offer】替换空格题目请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.解法一:package offer;public class Offer_2 { public static String replaceSpace(StringBuffer str) { S...原创 2019-03-27 12:50:56 · 115 阅读 · 0 评论 -
[剑指offer] 二维数组中的查找 简单易懂 java实现
**[剑指offer] 二维数组中的查找**题目在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 ***思路选取右上角元素,元素大于Key --> 剔除整列,元素小于key -...原创 2019-03-27 12:14:36 · 94 阅读 · 0 评论 -
【剑指offer】 旋转数组的最小数字 java实现
【剑指offer】 旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。代码:package offer;public class Offe...原创 2019-03-30 14:59:23 · 98 阅读 · 0 评论 -
【剑指offer】 用两个栈实现队列 java实现
【剑指offer】 用两个栈实现队列题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析:栈和队列的性质,栈是先进后出的,而队列是先进先出的。对于栈我们可以看成是一个装羽毛球的球筒,第一个放入球筒的球在最底部,最后一个球放在最上部;对于队列,就像买票排队,先排的先出,。言归正传,假如输入1,2,3则该程序也需要按顺序输出1,2,3。代码:pac...原创 2019-03-30 14:01:41 · 173 阅读 · 0 评论 -
阿里巴巴java方向笔试题 带详细答案
阿里巴巴java方向笔试题 带详细答案1,下列说法正确的是()A.一个文件里可以同时存在两个public修饰的类B.构造函数可以被重写(override)C.子类不能访问父类非public和protected修饰的属性D.final修饰的类可以被继承答案:C一个不是必须要放在public类中才能运行程序。重写是子类继承父类后对父类的方法进行修改。方法名,参数,返回值必须一样。 不能...原创 2019-04-12 18:14:00 · 3936 阅读 · 0 评论 -
阿里巴巴面试题汇总(java方向) 带答案
阿里巴巴面试题汇总1.一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。2、String不可变是因为在JDK中String类被声明为一个final类。3、StringBuffer是...原创 2019-04-12 22:33:01 · 449 阅读 · 1 评论 -
阿里巴巴面试题 详细解答
阿里巴巴面试题二十、关于Cache(Ehcache,Memcached)最近研究了一下缓存技术,主要比较了一下memcached和ehcache。ehcache是纯java编写的,通信是通过RMI方式,适用于基于java技术的项目。memcached服务器端是c编写的,客户端有多个语言的实现,如c,php(淘宝,sina等各大门户网站),python(豆瓣网),java(Xmemcache...原创 2019-04-12 23:01:03 · 140 阅读 · 0 评论 -
Spring强制使用CGLIB代理事务
Spring强制使用CGLIB代理事务Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。(建议尽量使用JDK的动态代理)如果被代理的目标对象实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理。如果你希望强制使用CGLIB代理,(例如:希望代理目标对象的所有方法,而不只是实现自接口的...原创 2019-04-14 17:47:39 · 2766 阅读 · 0 评论 -
解决哈希(hash)冲突的方法
解决哈希(hash)冲突的方法当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时。冲突就难免会发生。另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记录,不仅发生冲突,而且还会发生溢出。因此,处理冲突和溢出是哈希技术中的两个重要问题。1.哈希函数:哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表成为哈希表。基本思想:首先在元素的关键字...原创 2019-04-14 17:42:59 · 3119 阅读 · 0 评论 -
java的基本类型 扩展内容
java的基本类型java的基本类型有8中:1)四种整数类型(byte、short、int、long):byte:8 位,用于表示最小数据单位,占一个字节(一个字节8位)int:32 位、最常用 ,占4个字节long:64 位,占8个字节注意事项:int i=5; // 5 叫直接量(或字面量),即 直接写出的常数。整数字面量默认都为 int 类型,所以在定义的 long 型数据后...原创 2019-04-14 13:21:07 · 1313 阅读 · 0 评论 -
Redis的五种数据类型及方法
Redis的五种数据类型及方法Redis是一种key/value型数据库,其中,每个key和value都是使用对象表示的。1、string(字符串)应用场景:很常见的场景用于统计网站访问数量,当前在线人数等。incr命令(++操作)2、hash(哈希)应用场景:例如存储、读取、修改用户属性(name,age,pwd等) Redis hash 是一个键值(key=>value)...原创 2019-04-14 13:00:59 · 282 阅读 · 0 评论 -
java中split方法 简单详细
java中split方法思考下列代码的执行结果public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 =...原创 2019-04-14 12:42:34 · 1263 阅读 · 0 评论 -
堆排序 java实现 简单易懂
堆排序堆排序的时间复杂度O(N*logN),额外空间复杂度O(1),是一个不稳定性的排序堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆性质:每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆。如下图上面的结构映射成数组就变成了下面这个样子还有一...原创 2019-04-14 12:04:09 · 532 阅读 · 0 评论