自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

可乐多点冰的博客

正在去BAT的路上修行

  • 博客(100)
  • 收藏
  • 关注

原创 记录阿里技术面试全流程

最近面试了阿里的一个岗位技术(蚂蚁集团下面的BU),记录一下阿里技术面试时间流程(阿里审批流程、阿里入职流程,阿里入职时间等说法),以便给其他面试者一个时间参考,毕竟等待的过程是痛苦的。这次采用相对时间记录前一天,简历录入系统。1月1日,一面,技术电话面试,晚上8点,80分钟。1月2日,二面(1)技术电话面试,晚上8点,50分钟。1月4日,二面(2)技术电话面试,晚上8点,48分钟。1月5日,三面,技术笔试面试,晚上9点,60分钟。1月8日,四面,技术视频面试,早上11点,50分钟。1月1

2021-04-01 15:01:08 6024 11

原创 spring入参为指定值,校验java入参的值为规定的值,利用Validator指定值校验注解——一看就会

我们在使用spring项目的时候,经常使用@Valid来对入参进行校验,比如必须为空,必须不为空,长度多少,是否符合邮件格式等等,同时也可以正则。如下图所示, @Null(message = "id不能传入",groups = {MyValidDTOIdNull.class}) @NotNull(message = "id必须传入",groups = {MyValidDTOIdNotNull.class}) private String id; @Len

2020-12-08 11:58:21 11911 8

原创 SpringBoot源码——请求全过程源码分析——一步一步详细分析

文章目录前言一、SpringBoot源码二、源码分析1.引入库2.读入数据总结前言作为java开发,经常使用SpringBoot框架,那么掌握SpringBoot的请求的全流程还是十分必要的。没有研究源码之前,有一些疑问:为什么要返回json串的时候需要在方法上加@ResponseBody,或者在类上加@RestController为什么返回String类型,不加@ResponseBody,就是要去找视图解析器返回modelAndVIew类型并加@ResponseBody,那返回的json串

2020-10-15 23:35:45 3360 1

原创 java优雅的打印日志——对controller层方法的进入和结束地方打印日志——直接使用

场景:看日志是后端常用的操作,但是日志过于多的时候,很难分清日志打印的是不是同一个调用里面的。所以在controller的方法的开始和结尾的地方,打印日志,并且打印入参和出参,这样就能够很好的分析日志的逻辑了。由于每一个controller层的方法都需要打印进入和返回的日志,所以使用AOP的思想可以很好的解决,我们这边使用静态代理AspectJ。 <dependency> <groupId>org.aspectj</groupId&gt

2020-09-07 19:30:09 6270 1

原创 2023年工作心得小结

1、技术上没有啥本质成长,业务更加熟练,属于在舒适区里。2、想有结果,努力工作只是一部分因素,不过也算是前提吧。3、不要把工作关系仅是存在于工作,莫要越界,否则伤自己。1、学习新知识,看书,提升技术硬实力和业务软实力。3、保持边界,不要再被PUA,独立自主一点。2、保持冷静,少说话,少帮助,少总结。

2023-12-19 17:03:55 1072

原创 高保链路分析——一看就会

高保链路分析

2022-11-29 14:47:54 1995 1

原创 降级、熔断和限流———一看就会

熔断、降级、限流

2022-11-28 12:03:22 1979

原创 java开发的正常开发步骤和进度总结

开发进度,开发流程介绍

2022-07-26 16:33:25 2264

原创 The class java.lang.IllegalArgumentException may be caused by the wrapped ProcessingEnvironment obje

idea2021.1.2启动的时候报错java: java.lang.IllegalArgumentExceptionjava: The class java.lang.IllegalArgumentException may be caused by the wrapped ProcessingEnvironment object. Please pass the wrapped ProcessingEnvironment further to super.init(). If you nee

2021-06-17 14:44:30 6654 2

原创 Mac怎么取消Idea中Ctrl加左键等于右键

ctrl+左键等于右键是MAC系统自带的,目前没有什么办法禁止。而idea中ctrl加左键是进入类和方法的必要的快捷键。所以这里可以使用ctrl加右键的方法进行替代。只要熟悉了就好。

2021-05-22 23:15:38 4076 2

原创 Caffeine的集成Springboot的简单使用

在使用本地缓存的时候,可以很好解决分布式缓存的单点问题,所以一般本地缓存有ehcache,guava和Caffeine。guava已经在Spring5种不支持了,通过sprinboot的自动配置可以看到没有了guava。现在将Caffeine的使用简单描述如下:第一步、引入依赖 <dependency> <groupId>com.github.ben-manes.caffeine</groupId>

2021-03-05 18:09:16 567

原创 简单理解ThreadLocal源码分析

ThreadLocal是线程局部变量,所谓的线程局部变量,就是仅仅只能被本线程访问,不能在线程之间进行共享访问的变量。项目为了在各个时候获取用户信息,每次都会把请求的ticket值使用工具类里的ThreadLocal存起来,然后通过一个工具服务bean去获取ThreadLocal各自线程的存入的ticket,这样就可以到处注解注入工具服务bean使用了用户的信息了。public class TicketUtil { private static ThreadLocal<UserInfo&

2021-02-25 16:49:04 196 2

原创 IDEA插件启动随应用和项目自动执行,ProjectComponent、ProjectComponent弃用之后解决办法

idea 应用级别组件ProjectComponent和项目级别,在项目打开时生效ProjectComponent 这2两个接口在2021年之后会逐渐被遗弃使用,现在插件若继续使用它们插件会出现兼容问题,从而无法上传插件库。阅读IntelliJ Platform Plugin SDK开发文档,也看到plugin.xml文件中有说明,网址https://plugins.jetbrains.com/docs/intellij/plugin-configuration-file.html原来这2接口被遗弃

2021-02-08 16:38:49 2583

原创 简单分析SqlSessionTemplate、sqlSessionFactory、sqlSessionFactoryBean、SqlSessionManager等区别和作用

最近分析mybatis的mapper时,研究源码时,这些概念理清如下:sqlSessionFactoryBean,主要作用是通过getObject得到sqlSessionFactory,同时可以设置数据源,mybatis基本配置等。public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<Applic

2021-01-27 12:36:36 5412 2

原创 简单分析@NestedConfigurationProperty的作用

看源码的时候,碰到这个注解@NestedConfigurationProperty,之前知道@ConfigurationProperty是设置值的,但是nested就不清楚了。分析如下查看源码/** * Indicates that a field in a {@link ConfigurationProperties @ConfigurationProperties} * object should be treated as if it were a nested type. This ann

2021-01-26 20:42:41 18629

原创 简单分析jdbc、datasource数据源、数据库驱动,连接池,jdbcTemplate,mybatis、JPA、Hibernate的区别

进行数据库操作的时候,经常出现这些名词:jdbc、datasource数据源、数据库驱动,mybatis、JPA、Hibernate。区分他们的含义和所处位置十分必要,现在分析如下1、数据库数据库,就是我们常用的关系型数据库,比如mysql数据库、postgresql,oracle数据库。2、jdbcjdbc,是Java提供的一个操作数据库的API,提供了很多的接口,就是一种规范。定义如下:数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来

2021-01-26 16:16:55 3434 3

原创 正确写出doublecheck的单例模式

单例模式属于很常见的一种模式,只要是想整个java中该类只需要一个对象即可。默认Spring就是使用的单例模式。写单例模式的方式很多,现在介绍一个doublecheck的方式。public class SingletonController { //默认是第一次创建 private static volatile boolean isCreate = false; //本类内部创建对象实例 private static volatile SingletonContro

2021-01-20 16:12:09 1228

原创 简单应用Redis锁解决实际需求

有一个需求是生成订单编号,按序递增,那我们可以使用redis的incr自增方法使订单编号顺序递增。让redis中存入了一个流水号key,incr之后其值就保持最新流水号。但是若很不幸的是,旧redis下线了,新的redis里又不存在原来的流水号key,那就需要代码层面自动添加进去,这个时候就需要编写redis锁去数据库中查找最大的流水号值,并赋值到redis。代码如下 //获取最大的保单流水号 String serialNoKey = redisUtil.get(trav

2021-01-18 11:10:19 135

原创 JVM初级笔记

文章目录JVM虚拟机一、基础1、JVM定义2、JVM知识图谱二、类加载机制1、class文件2、类加载过程3、类加载器三、内存结构1、程序计数器2、虚拟机栈3、本地方法栈4、堆5、方法区四、GC垃圾回收机制1、定义2、算法3、垃圾回收器4、优化JVM虚拟机一、基础1、JVM定义规范,不同实现hotspot,作用将class字节码文件加载到JVM中,通过解释器解释为操作系统认识的机器码。1.垃圾回收机制2.一次编码,到处运行,跨平台。3.JIT对热点代码优化(锁消除)2、JVM知识图谱1

2021-01-12 15:25:05 211

原创 简单从底层字节码文件理解++i和i++的区别

按照之前常规理解,++i,是先自增再赋值,i++是先赋值再自增。那么从javap -v xx.class文件之后,可以看到一下指令 int i = 0; i = i++;// 此处的字节码可以翻译为下面的第一个图iload,iinc,istore /* iload:从局部变量表中加载数字'0'到操作栈中 innc:变量i直接在局部变量表的slot上进行运算,并不影响操作数栈已经存在的值 istore:将此时操作栈顶的值(0)弹出,存入局部变量表中,并将刚刚自增的值覆盖掉 */ i

2021-01-12 11:41:21 498 2

原创 简单介绍查看jvm内存信息工具jvisualvm的使用

运行程序的时候,希望看到jvm堆内存的信息,有2种方法,一种是使用静态的,找到程序的进程id即pid,然后使用jmap -heap pid 就可以看到了。第二种使用动态的,使用工具jconsole或者jvisualvm。这里介绍一下工具jvisualvm,它更加强大。首先输入命令D:\idea\code\firstdemo\target\classes\com\jd\qsm\first\demo\controller>jvisualvmD:\idea\code\firstdemo\targ

2021-01-09 21:40:42 1439

原创 字节码解析String以及intern()方法

判断下面的例子public class DemoClass { public static void main(String[] args) throws Exception { String s1 = "a"; String s2 = "b"; String s3 = "a"+"b"; String s4 = s1 + s2; String s5 = "ab"; String s6 = s4.in

2021-01-09 14:35:52 139

原创 简单理解常量、常量池、运行时常量池和字符串常量池

1、常量常量在java中就值的是一般的字面量,比如字符串,整数,浮点数等等数据。简单理解java中什么叫常量2、常量池,也叫静态常量池,说常量池一定要指明是编译器生产

2021-01-09 13:43:25 3842

原创 简单理解java中什么叫常量

经常看到常量这个词,但是一般并没有太在意,之前一般就认为String定义的就是常量。实际上,JAVA常量就是在程序中固定不变的值,是不能改变的数据。例如数字1、字符“a”、浮点数3.2等。在Java中,常量包括整型常量、浮点数常量、布尔常量、字符常量,字符串常量等。因此JVM中所说的常量池,不仅仅包含了字符串常量,还有字符常量,整数常量等。...

2021-01-08 23:43:44 1973

原创 简单理解jdk1.8中的方法区

JVM里的方法区是线程共享的内存区域,存储已被虚拟机加载的类信息、常量、静态变量,静态代码块、即时编译器(JIT Compiler)编译后的代码数据等。简单而言,就是存储类结构信息,信息里包含了有常量池信息。还有至于运行时常量池(串池,Integer常量池等)在jdk1.8之前和之后位置不同,1.8之前在方法区,在1.8之后在堆内存中了。【重点】方法区是一个逻辑概念,其具体实现为jdk1.8的元空间与jdk1.8之前的永久代,他们之间最大的区别在于:元空间并不在JVM管理的内存中,而是使用本地内存。

2021-01-08 23:20:27 2936 5

原创 简单分析@Value是否赋值给静态变量

经常使用@Value复制给成员变量,但是静态变量能复制吗?答案是否定的,不能够生效。编写一个实例如下:@RestController@RequestMapping("/health")public class HelloController { @Value("${env}") private String env; @Value("${env2}") private static String env2 = "static"; @RequestMapp

2021-01-08 12:23:16 398

原创 简单查看并解释JVM中堆内存分配以及GC信息

一个JVM实例只有一个堆内存,堆也是Java内存管理的核心区域,堆在JVM启动的时候创建,其空间大小也被创建(一般初始大小-Xms为内存的64分之一,最大-Xmx为4分之一),是JVM中最大的一块内存空间,所有线程共享Java堆,物理上不连续的逻辑上连续的内存空间。几乎所有的实例都在这里分配内存,在方法结束后,堆中的对象不会马上删除,仅仅在垃圾收集的时候被删除,堆是GC(垃圾收集器)执行垃圾回收的重点区域。一般堆里面又分为逻辑上有三个部分。Java7及以前将堆空间逻辑上分成三部分:新生区+养老区+永久

2021-01-08 11:13:49 695

原创 不小心删除了gitlab远端分支怎么恢复

git操作的时候,有时候误操作了删除远端分支。那么恢复有2种办法。第一种,非常简单,一般电脑上都有该远端分支的本地分支,若是有的话,找【最近】一次提交了的同事再次push一下就好。也可以不用找最近的,把自己的提交也行,若原本最新的同事也会继续提交的话,最终也会保持时最新的。第二种,若本地分支也没有了的情况,就需要使用一些命令了。比如我刚刚删除了本地和远端的dev分支第一步输入git reflog --date=iso$ git reflog --date=iso8eb0d82 (HEAD -&g

2021-01-07 11:09:24 11887 6

原创 java集合笔记简单版

文章目录java集合笔记基础ListMapSet集合java集合笔记基础1、集合架构图2、一种是集合(Collection),存储一个元素集合,另一种Map,存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue。再下面是一些抽象类。最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。3、集合与数组的区别,主要是定长的问题。另外数组可以为基本数

2021-01-06 18:26:53 135

原创 java笔记——个人简单版

1、基础1、java之父高斯林2、机器语言,汇编语言,高级语言。3、位bit,字节Byte,一个字节等于8位。字节是数据存储的最小单元。4、跨平台,原因是jvm,每种系统都有相对应的jvm。jvm<jre<jdk5、java是解释型的语言,因为虽然java也需要编译,编译成.class文件,但是并不是机器可以识别的语言,而是字节码,最终还是需要 jvm的解释,才能在各个平台执行编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。解释型语言:把做

2020-12-29 15:47:37 190

原创 简单理解hashMap中key相同,什么叫同一个key

先说结论:做为key的对象,其hashCode相等且equals为true。(同一个对象肯定是相同,这个就不用多说了)if (p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k))))Object类hashCode是一个本地方法根据对象内存地址生成的一个数equals,是地址相同的对象,即同一个对象。==必然相等而其他类一般都重写了2者hashCode,主要用于集合的某

2020-12-28 20:14:56 2612 2

原创 简单理解java注解以及元注解@Retention

平时开发过程中经常使用注解,比如spring入参为指定值,校验java入参的值为规定的值,就使用了自定义的注解来规定指定值。还有最常见的重写@override等。注解就是为了贴标签,然后开发人员根据标签以及标签里设置值,进行不同的处理。那么以下面注解为例,简单说明一下@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})@Retention(RUNTIME)@Documented@Constraint(validated

2020-12-24 11:48:24 216

原创 简单理解Sting是不可变的原理

经常看到说Sting是不可变的,可是平时String类型的对象的值进行可以变比如String s = "Hello World";System.out.println(StrUtil.format("值={},hashCode={}", s, s.hashCode()));s = "Hello World Again";System.out.println(StrUtil.format("值={},hashCode={}", s, s.hashCode()));运行的结果为值=Hello W

2020-12-23 18:11:09 228

原创 Nginx笔记——非常简单

文章目录Nginx一、基础概念二、进阶理论1、多进程单线程结构,io多路复用2、负载均衡算法3、内存管理4、通信—共享内存5、通信—信号管理三、模块和优化1、http请求的11个过程2、常见模块3、nginx优化4、高可用,高并发四、配置文件1、静态服务器2、api调用3、反向代理-负载均衡-缓存4、配置格式Nginx一、基础概念Nginx是一个高效的HTTP和反向代理服务器。作用于动静分离、API服务器和反向代理。反向代理里有负载均衡和缓存等功能。支持高并发5w/s,与keepalived联合

2020-12-22 10:44:48 249

原创 Optional联合Stream使用——集合判空或取值

jdk8Optional联合Stream使用简单判空取值原来判断 SspUnionPolicyDetailShowResp showResp = new SspUnionPolicyDetailShowResp(); InterestsCell interestsCell2 = new InterestsCell(); if (ObjectUtils.isNotEmpty(showResp) && ObjectUtils.

2020-12-17 21:18:55 6991 1

原创 k8s中PV、PVC、StorageClass的简单理解

1、PersistentVolume(PV)就可以理解为是一个网络存储,就是一个实实在在的存储数据的地方,只不过是以网络的方式发生数据到存储的地方,比如NFS, iSCSI和云提供商指定的存储系统。若严格来说,PV是k8s里面的一个概念,它本身不是存储,只不过是创建pv的资源清单文件中指定了网络存储的地址,同时也指定了一些存储的参数,例如一些大小,性能等指标。apiVersion: v1kind: PersistentVolumemetadata: name: nfs-pv namespac

2020-12-09 10:50:25 7004

原创 linux笔记——初级版本——一看就会

Linux笔记一、基础知识Linux分为内核版本和发行版本。Linux常见的目录结构如下:/root linux的超级管理员的家目录/home/username linux操作系统所有用户的家目录/etc 配置文件/bin 二进制文件,一般可以存储shell命令/opt 用户自己的第三方应用程序/usr 英文为unix system resourc 资源目录,头文件 游戏 用户自己的应用程序/dev device设备目录,在linux一切都是文件。U盘,显卡/mnt 手动挂

2020-11-18 12:53:40 323

原创 每一次ssh连接2个进程生成——一看就会

使用ssh连接服务器的发现,每次服务器都会创建2个进程。本来已经创建了一个ssh连接。[root@master ~]# lsof -i :22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 9093 root 3u IPv4 52875 0t0 TCP *:ssh (LISTEN)sshd 9093 root 4u IPv6 52877 0t0 TCP *:ssh

2020-11-17 11:48:20 819

原创 Java一个属性依赖于另外一个属性的值

一个java类中的一个属性最开始需要从另外一个属性的值得到,现在举例如下。最简单的例子,判断是否成功@Data@ApiModel(description = "返回结果集")public class ReturnResult<T> { @ApiModelProperty(value = "返回状态码;0000:成功") private String code; @ApiModelProperty(value = "描述信息") private Stri

2020-11-12 19:50:12 1519

原创 Nginx访问日志详解——各个部分含义——非常简单

Nginx 访问日志最近有分析nginx日志,现在记录一下默认的访问日志格式并分析一下作用。1、查询nginx配置信息root@proxy-nginx2-7b45c87d76-5ldt2:/# whereis nginxnginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginxroot@proxy-nginx2-7b45c87d76-5ldt2:/# cd /etc/nginxroot@proxy-nginx2-7b45c8

2020-11-12 11:26:56 2416

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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