![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
文章平均质量分 74
Java旅途
这个作者很懒,什么都没留下…
展开
-
@JsonFormat 和 @DateTimeFormat
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)private Date uploadDate;原创 2024-01-18 16:45:10 · 390 阅读 · 0 评论 -
B站有哪些值得Java初学者看的视频,Java学习路线
B站有哪些值得看的Java视频,如何用B站来自学Java,Java学习路线原创 2022-12-12 17:05:09 · 4206 阅读 · 2 评论 -
Java中的深浅拷贝问题,你清楚吗?
一、前言拷贝这个词想必大家都很熟悉,在工作中经常需要拷贝一份文件作为副本。拷贝的好处也很明显,相较于新建来说,可以节省很大的工作量。在Java中,同样存在拷贝这个概念,拷贝的意义也是可以节省创建对象的开销。Object类中有一个方法clone(),具体方法如下:protected native Object clone() throws CloneNotSupportedException;该方法由 protected 修饰,java中所有类默认是继承Object类的,重载后的clone()方法原创 2021-01-25 09:54:07 · 494 阅读 · 0 评论 -
为什么线程安全的List推荐使用CopyOnWriteArrayList,而不是Vector
`Vector`和`CopyOnWriteArrayList`都是线程安全的List,底层都是数组实现的,`Vector`的每个方法都进行了加锁,而`CopyOnWriteArrayList`的读操作是不加锁的,因此`CopyOnWriteArrayList`的读性能远高于`Vector`,`Vector`每次扩容的大小都是原来数组大小的`2`倍,而`CopyOnWriteArrayList`不需要扩容,通过COW思想就能使数组容量满足要求。两个集合都是先了`RandomAccess`接口,支持随机读取原创 2020-12-28 11:29:15 · 775 阅读 · 0 评论 -
从面试角度分析LinkedList源码
注:本系列文章中用到的jdk版本均为java8LinkedList类图如下:LinkedList底层是由双向链表实现的。链表好比火车,每节车厢包含了车厢和连接下一节车厢的连接点。而双向链表的每个节点不仅有指向下一个节点的指针,还有指向上一个节点的指针。在LinkedList源码中有一个Node静态类,源码如下:private static class Node<E> { E item; Node<E> next; Node<E> pr.原创 2020-12-18 15:23:25 · 457 阅读 · 0 评论 -
“锟斤拷“的前世今生
不管是在工作中还是生活中,相信很多同学都被“锟斤拷”深深的毒害过,比如这样,这样,还有这样,那么究竟是为什么会出现这些奇怪的字符?接下来我们一探究竟!ASCII编码在计算机底层都是用0和1进行存储的,ASCII编码将所有的字母及符号进行编码后转成二进制的0和1进行存储,字母和符号占1个字节(即8bit),标准的ASCII码规定最高位必须为0,因此ASCII编码只能有128个,转成十进制即为0-127。标准的ASCII码表如下:ASCII码表只有128个字符,对于英语来说已经够用了,但是世原创 2020-09-19 11:39:24 · 6046 阅读 · 1 评论 -
使用枚举的正确姿势
枚举是JDK1.5引入的新特性。被enum关键字修饰的类就是一个枚举类。关于枚举,阿里巴巴开发手册有这样两条建议:枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。如果变量值仅在一个固定范围内变化用 enum 类型来定义。一 枚举类有哪些特点创建一个ColorEnum的枚举类,通过编译,再反编译看看它发生了哪些变化。public enum ColorEnum { RED,GREEN,BULE;}使用命令javac ColorEnum.java进行编译生成原创 2020-09-19 11:19:39 · 671 阅读 · 0 评论 -
Java8——Stream流
Stream是数据渠道,用于操作集合、数组等生成的元素序列。Stream操作的三个步骤:创建Stream中间操作终止操作一、获取stream的四种方式通过collection系列集合的stream()或parallelStream()获取。@Testvoid test11(){ List<String> list = new ArrayList<>(); Stream<String> stringStream = lis原创 2020-07-16 08:54:07 · 151 阅读 · 0 评论 -
Java8——方法引用
方法引用就是通过类名或方法名引用已经存在的方法来简化lambda表达式。那么什么时候需要用方法引用呢?如果lamdba体中的内容已经有方法实现了,我们就可以使用方法引用。一、方法引用的三种语法格式1. 对象::实例方法名lamdba写法:@Testvoid test1(){ Consumer<String> con = x -> System.out.println(x);}方法引用写法:@Testvoid test2(){ PrintStream ou原创 2020-07-14 08:59:42 · 1253 阅读 · 0 评论 -
重复提交,你是如何处理的?
今天早上,新来的同事小王突然问我:“周哥,什么是幂等性啊?”。然后我就跟他解释了一番,幂等性就是说无论你执行几次请求,其结果是一样的。说到了幂等就不得不说重复提交了,你连续点击提交按钮,理论上来说这是同一条数据,数据库应该只能存入一条,而实际上存放了多条,这就违反了幂等性。因此我们就需要做一些处理,来保证连续点击提交按钮后,数据库只能存入一条数据。防止重复提交的方式很多,这里我就说一下我认为比较好用的一种。自定义注解+Aop实现我们通过获取用户ip及访问的接口来判断他是否重复提交,假如这个ip在一段时原创 2020-06-24 08:44:42 · 586 阅读 · 0 评论 -
六百字搞懂lambda
什么是函数式编程在学习lambda之前,我们先搞清楚什么是函数。我理解的函数就是输入一些东西经过一定的规则后输出。假如我们超时买苹果,苹果的单价是5元,则f(x) = 5x;其中x代表我们购买苹果的重量,则苹果的重量和价格对应的一种关系就是函数。我们看看这个函数,我们关注的重点其实就是x和5x。这样我们就好理解了,函数关注的重点就是入参和对应的函数规则,其他的东西都不重要。下面我们结合一段java代码来分析:函数式接口@FunctionalInterfacepublic interface Ap原创 2020-05-22 10:25:50 · 1133 阅读 · 0 评论 -
判空我推荐StringUtils.isBlank
在我们日常开发中,判空应该是最常用的一个操作了。因此项目中总是少不了依赖commons-lang3包。这个包为我们提供了两个判空的方法,分别是StringUtils.isEmpty(CharSequence cs)和StringUtils.isBlank(CharSequence cs)。我们分别来看看这两个方法有什么区别。一、StringUtils.isEmptyisEmpty的源码如下:public static boolean isEmpty(CharSequence cs) { ret原创 2020-05-18 10:27:22 · 2047 阅读 · 1 评论 -
疫情中对未来行业的几点思考
NO.1 前言一场疫情的突袭使得原本热闹的春节平静了下来。正月初一开始,各个餐饮、网咖、酒吧等各种聚会娱乐场所悉数关门。封村、封城尽可能减少人员流动,以防疫情继续扩散,紧接着国务院通知延长春节假期,2月3号开始正常上班。我也是在2月2号踏上了火车,火车上人特别少,一大部分人肯定都还在观望,等待着疫情轻松一点再去上班。居家隔离办公一周后,我也是接到公司通知,前往公司上班。部门来的人不多,只有三分之...原创 2020-02-18 10:43:25 · 1741 阅读 · 0 评论 -
rabbitmq系列(三)消息幂等性处理
一、springboot整合rabbitmq我们需要新建两个工程,一个作为生产者,另一个作为消费者。在pom.xml中添加amqp依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp...原创 2020-01-17 08:40:01 · 1779 阅读 · 1 评论 -
rabbitmq系列(二)五种常见模式
一、简单模式原理:生产者将消息交给默认的交换机,交换机获取消息后交给绑定这个生产者的队列(投递规则为队列名称和routing key 相同的队列),监听当前队列的消费者获取信息并执行消费逻辑。场景:有一个oa系统,用户通过接收手机验证码进行注册,页面上点击获取验证码后,将验证码放到消息队列,然后短信服务从队列中获取到验证码,并发送给用户。实现:生产者:public class Prod...原创 2020-01-15 10:58:51 · 1270 阅读 · 0 评论 -
rabbitmq系列(一)初识rabbitmq
为什么要使用消息中间件案例:假如我们开发了一个商品抢购网站。这个网站的目的就是在某一时间点进行抢购商品,同时要求用户注册,在注册的时候会同时给用户电话和邮箱中发送验证码,以便完成信息注册。传统做法应该是这样的。两种方式,并行即启用两个线程,当用户提交信息后,分别去发送邮件和发送短信。这种方式很明显比串行的方式更快。当我们加入消息队列后,处理方式如下图:加入消息中间件后,我们只需要注册信息存...原创 2020-01-13 08:56:08 · 1046 阅读 · 0 评论 -
调试接口你还在用postman吗
作者 | 陈凯玲来源 | my.oschina.net/keking/blog/3104972接口调试是每个软件开发从业者必不可少的一项技能,一个项目的的完成,可能接口测试调试的时间比真正开发写代码的时间还要多,几乎是每个开发的日常工作项。所谓工欲善其事必先利其器,在没有尝到IDEA REST真香之前,postman(chrome的一款插件)确实是一个非常不错的选择,具有完备的REST Cli...转载 2019-12-18 14:12:29 · 1171 阅读 · 2 评论 -
Token ,Cookie、Session傻傻分不清楚?
作者 | 王菜鸟1993来源 | cnblogs.com/JamesWang1993/p/8593494.html在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解。Cookiecookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。cookie由...转载 2019-12-17 09:13:34 · 1010 阅读 · 0 评论 -
你不可不知的自定义注解
作者 | cherry-peng来源 | https://blog.csdn.net/xsp_happyboy/article/details/809874841 注解的概念1.1 注解的官方定义首先看看官方对注解的描述:An annotation is a form of metadata, that can be added to Java source code. Classes, ...转载 2019-12-12 08:35:23 · 998 阅读 · 0 评论 -
一个汉字占几个字节你真的记住了吗?
一个汉字占几个字节是不是不太好记呢,编码不一样则占字节位就不一样。下面用一段简短的代码了解一下一个汉字占几个字节。示例String s = "情系IT"; try { byte[] bytes1 = s.getBytes("gbk"); for (byte b : bytes1) { System....原创 2019-12-02 08:47:37 · 1556 阅读 · 0 评论 -
2020年Java面试经典100问,进入BAT不是梦
早起的鸟儿有虫吃。2019年java面试经典100问,进入BAT不是梦。2019年马上就要结束了,领完年终奖是不是该跳槽了呢,提前准备起来吧,小伙伴。本文由公众号「情系IT」整理,设计到的内容由java基础、数据库、SSM框架、redis、消息队列、spring boot、spring cloud、git及一些前端知识。由于篇幅过长,故在此只发布问题,如果想要获取完整的问题及答案,请关注 微 信 ...原创 2019-11-25 14:17:48 · 12267 阅读 · 10 评论 -
你真的了解java序列化吗
问:可是我这个实体类,没有实现序列化那个接口,也能存到数据库,这是为什么呢?想不通!我是用的注解和hibernate框架弄的!难道说不实现序列化接口也能保存数据?不应该啊。@Entitypublic class Person {@Id @GeneratedValueprivate Integer id;private String name;private Integer age...原创 2019-11-01 12:53:57 · 393 阅读 · 0 评论 -
java类在何时被加载
我们接着上一章的代码继续来了解一下java类是在什么时候加载的。在开始验证之前,我们现在IDEA做如下配置。-XX:+TraceClassLoading 监控类的加载我们新建了一个TestController 来测试类的加载时机,代码如下:@RestControllerpublic class TestController { @RequestMapping("/newInsta...原创 2019-10-30 16:59:27 · 932 阅读 · 0 评论 -
java类对象的初始化顺序
在下面这个例子中,我们分别在父类和子类中测试了静态代码块、普通代码块、静态成员变量、普通成员变量、构造器、静态内部类。一:代码块及变量测试class Field{ public static String baseFieldInit(){ System.out.println("父类全局变量"); return ""; } public...原创 2019-10-29 21:19:27 · 398 阅读 · 0 评论 -
java23种设计模式(三)单例模式
原文地址:https://zhuanlan.zhihu.com/p/23713957一、概述1、什么是单例模式?百度百科是这样定义的:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例我是这样理解的:单例模式就是只允许一个实例,最开始使用它的时候是C#中,我要实例化一个A窗体,但是有个需求就是A窗体必须是唯一,不管我...转载 2019-10-28 08:56:06 · 930 阅读 · 0 评论 -
excel读取神奇——easyexcel
今天给大家安利一款excel文件导入神器,easyexcel,官方地址:(https://github.com/alibaba/easyexcel)。在官网文档中有介绍了其性能。从上面的性能测试可以看出easyexcel在解析耗时上比poiuserModel模式弱了一些。主要原因是我内部采用了反射做模型字段映射,中间我也加了cache,但感觉这点差距可以接受的。但在内存消耗上差别就比较明显了,ea...原创 2019-10-22 09:03:24 · 1070 阅读 · 2 评论 -
java23种设计模式(二)抽象工厂模式
我们接着上一章的工厂方法模式继续学习一下抽象工厂模式。抽象工厂模式:在工厂模式中,如果有多个产品,则就是抽象工厂模式。例子:有一个工厂开了两个子公司,专门用来生产电脑配件键盘和鼠标,一个是联想工厂则生产联想的产品,另一个是宏碁工厂则生产宏碁的产品。代码如下:1、工厂接口(可以生产鼠标和键盘)public interface Factory { // 生产鼠标 Mouse cre...原创 2019-10-21 08:41:26 · 893 阅读 · 0 评论 -
java23种设计模式(一)工厂方法模式
在说工厂方法模式之前,先了解一下简单工厂模式。工厂方法模式其实是在简单工厂上面做了一些增强。简单工厂模式:有一个专门的类来生产其他类的实例,生产的这些实例有一个共同父类。这个跟我们的多态有一点像。例子:假如我们有一个鼠标工厂,这个工厂既可以生产联想鼠标,又可以生产宏碁鼠标。代码如下:1、鼠标工厂(可以生产联想鼠标和宏碁鼠标)public class MouseFactory { /**...原创 2019-10-18 08:47:23 · 964 阅读 · 0 评论 -
java23种设计模式
一、设计模式的6大设计原则1、开闭原则(open close principle)开放即指对扩展开放,对修改关闭 简而言之,就是扩展功能的时候应该尽量的不修改原有的代码。2、里氏代换原则(liskov substitution principle)可以简单理解为派生类与基类的替换关系,一旦程序中出现基类,那么这个基类若是呗派生类替换了,也应该是合适的,并且对程序功能不受影响,该原则实际上是...原创 2019-10-17 09:51:51 · 921 阅读 · 0 评论 -
java随机生成6位随机数
// 生成6位随机数int random = (int)((Math.random()*9+1)*100000);// 生成5位随机数int random = (int)((Math.random()*9+1)*10000);// 生成4位随机数int random = (int)((Math.random()*9+1)*1000);...原创 2019-08-21 15:17:53 · 1891 阅读 · 0 评论 -
JdbcTemplate查询结果为map时如何处理
JdbcTemplate做为一种常用的和数据库交互的方式,用起来很方便。但是当查询结果为map时要求查询的结果有且仅有一条数据。接下来我们看看源码到底是如何处理的。重点看第三个截图,如何处理查询结果的,如果查询结果为空,则throw new EmptyResultDataAccessException(1);,如果结果大于1条,则throw new IncorrectResultSizeData...原创 2019-08-21 12:40:53 · 6985 阅读 · 0 评论 -
通过正则表达式限制输入框只能数字,且不能以0开头
最近在做项目的时候有个需求,输入框输入金额的。这个金额只能是整数,我们都知道金额肯定不能以0开头。var value = val.replace(/\D/g, '')上面这行代码的意思是当输入的是除了数字以外的字符时用空代替。这时候我们再进行处理0开头的输入即可。下面这段是我开发小程序的时候写的,这个numInput当每次输入框的值发生变化的时候就会进入。 numInput(e) { ...原创 2019-07-18 08:53:29 · 16710 阅读 · 5 评论 -
equals和==的区别详解
大家在刷面试题的时候可能都刷到过equals和==之间的区别?简单来说答案就是:equals和 ==比较的都是地址,只不过许多类中都重写了equals方法,用来比较他们之间的值。接下来我们就详细看看,他们之间究竟有什么区别。一、堆和栈的区别举个例子说明一下,String a = new String(“123”);1)、对象的引用放在栈中,上例中a放在栈中;2)、八种基本数据类型放在栈中:...原创 2019-06-18 13:53:54 · 599 阅读 · 0 评论 -
springboot全局异常处理
我们经常写代码的时候会在controller中写大量的try{}catch(exception e){}来响应一些信息给用户以保证接口的完整性。这样在写接口的时候会存在大量重复的代码,即浪费时间,代码看起来又不美观,那么我们是不是可以定义一个异常信息,当出现这种情况的时候直接抛出异常,在异常中响应给用户一些信息。比如,我们写接口的时候,会接收参数,我们要判断参数是否为空,如果不为空的时候那就可以接...原创 2019-05-16 20:22:26 · 291 阅读 · 1 评论 -
http接口通过io流接收数据
先说一下问题,前几天由于工作需要,我这边需要提供几个接口用来接收厂家的数据推送。这没什么难的,写接口无非就是写几个controller来接收参数就可以了。我们先来看看接口文档,他们提供的参数格式如下,数据以作处理只保留格式。{ "time": 1515294211, "type": "1", "code": "111111", "dt": "1", "data": { "p": 4...原创 2019-06-18 13:55:13 · 6261 阅读 · 0 评论 -
关于toString()、string.valueOf()、""三种转换字符串方式的比较及mysql中空字段的转换
一、关于三种方式的效率问题在此就不做过多的讨论了。toString()>String.valueOf()>""。在执行效率上toSting()是最快的。二、关于“”和null能使用哪种方式进行转换字符串及转换后是什么?1.首先来看“”的转换 public static void main(String[] args) { System.out.prin...原创 2019-05-08 10:14:17 · 1963 阅读 · 0 评论 -
java注解的使用
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/77333860冷血之心的博客)1、注解的概述: 注解是用来替代配置文件的!你回忆一下,我们以前总是要写一些配置文件,例如web.xml你还记得么?里面要写和!谁来读配置文件呢?当然是Tomcat!谁来写配置文件呢?当转载 2017-08-18 16:59:14 · 267 阅读 · 0 评论 -
mysql通过limit实现分页功能
注:通过sql语句查询实现java类的分页效果,主要可以分为以下步骤:登录界面--->controller--->首页--->controller(第一次页面传过去的页码为null,因此在controller中需要处理null)--->访问dao层通过limit实现分页查询--->返回所需分页的页面。下面请参考具体代码!1、创建PagBean类,分页所用到的一些基...原创 2019-06-18 13:55:42 · 6599 阅读 · 0 评论