
小小小知识点
文章平均质量分 55
小小小小小很小的知识点
可乐多点冰
已经在BAT修行
展开
-
高保链路分析——一看就会
高保链路分析原创 2022-11-29 14:47:54 · 2234 阅读 · 1 评论 -
降级、熔断和限流———一看就会
熔断、降级、限流原创 2022-11-28 12:03:22 · 2116 阅读 · 0 评论 -
java开发的正常开发步骤和进度总结
开发进度,开发流程介绍原创 2022-07-26 16:33:25 · 2505 阅读 · 0 评论 -
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 · 7723 阅读 · 2 评论 -
Mac怎么取消Idea中Ctrl加左键等于右键
ctrl+左键等于右键是MAC系统自带的,目前没有什么办法禁止。而idea中ctrl加左键是进入类和方法的必要的快捷键。所以这里可以使用ctrl加右键的方法进行替代。只要熟悉了就好。原创 2021-05-22 23:15:38 · 5570 阅读 · 2 评论 -
记录阿里技术面试全流程
最近面试了阿里的一个岗位技术(蚂蚁集团下面的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 · 7799 阅读 · 11 评论 -
Caffeine的集成Springboot的简单使用
在使用本地缓存的时候,可以很好解决分布式缓存的单点问题,所以一般本地缓存有ehcache,guava和Caffeine。guava已经在Spring5种不支持了,通过sprinboot的自动配置可以看到没有了guava。现在将Caffeine的使用简单描述如下:第一步、引入依赖 <dependency> <groupId>com.github.ben-manes.caffeine</groupId>原创 2021-03-05 18:09:16 · 668 阅读 · 0 评论 -
简单理解ThreadLocal源码分析
ThreadLocal是线程局部变量,所谓的线程局部变量,就是仅仅只能被本线程访问,不能在线程之间进行共享访问的变量。项目为了在各个时候获取用户信息,每次都会把请求的ticket值使用工具类里的ThreadLocal存起来,然后通过一个工具服务bean去获取ThreadLocal各自线程的存入的ticket,这样就可以到处注解注入工具服务bean使用了用户的信息了。public class TicketUtil { private static ThreadLocal<UserInfo&原创 2021-02-25 16:49:04 · 244 阅读 · 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 · 3206 阅读 · 0 评论 -
简单分析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 · 6210 阅读 · 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 · 19917 阅读 · 0 评论 -
简单分析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 · 3939 阅读 · 3 评论 -
简单从底层字节码文件理解++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 · 597 阅读 · 2 评论 -
字节码解析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 · 179 阅读 · 0 评论 -
简单理解常量、常量池、运行时常量池和字符串常量池
1、常量常量在java中就值的是一般的字面量,比如字符串,整数,浮点数等等数据。简单理解java中什么叫常量2、常量池,也叫静态常量池,说常量池一定要指明是编译器生产原创 2021-01-09 13:43:25 · 4114 阅读 · 0 评论 -
简单理解java中什么叫常量
经常看到常量这个词,但是一般并没有太在意,之前一般就认为String定义的就是常量。实际上,JAVA常量就是在程序中固定不变的值,是不能改变的数据。例如数字1、字符“a”、浮点数3.2等。在Java中,常量包括整型常量、浮点数常量、布尔常量、字符常量,字符串常量等。因此JVM中所说的常量池,不仅仅包含了字符串常量,还有字符常量,整数常量等。...原创 2021-01-08 23:43:44 · 2170 阅读 · 0 评论 -
简单理解jdk1.8中的方法区
JVM里的方法区是线程共享的内存区域,存储已被虚拟机加载的类信息、常量、静态变量,静态代码块、即时编译器(JIT Compiler)编译后的代码数据等。简单而言,就是存储类结构信息,信息里包含了有常量池信息。还有至于运行时常量池(串池,Integer常量池等)在jdk1.8之前和之后位置不同,1.8之前在方法区,在1.8之后在堆内存中了。【重点】方法区是一个逻辑概念,其具体实现为jdk1.8的元空间与jdk1.8之前的永久代,他们之间最大的区别在于:元空间并不在JVM管理的内存中,而是使用本地内存。原创 2021-01-08 23:20:27 · 3308 阅读 · 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 · 495 阅读 · 0 评论 -
简单查看并解释JVM中堆内存分配以及GC信息
一个JVM实例只有一个堆内存,堆也是Java内存管理的核心区域,堆在JVM启动的时候创建,其空间大小也被创建(一般初始大小-Xms为内存的64分之一,最大-Xmx为4分之一),是JVM中最大的一块内存空间,所有线程共享Java堆,物理上不连续的逻辑上连续的内存空间。几乎所有的实例都在这里分配内存,在方法结束后,堆中的对象不会马上删除,仅仅在垃圾收集的时候被删除,堆是GC(垃圾收集器)执行垃圾回收的重点区域。一般堆里面又分为逻辑上有三个部分。Java7及以前将堆空间逻辑上分成三部分:新生区+养老区+永久原创 2021-01-08 11:13:49 · 790 阅读 · 0 评论 -
不小心删除了gitlab远端分支怎么恢复
git操作的时候,有时候误操作了删除远端分支。那么恢复有2种办法。第一种,非常简单,一般电脑上都有该远端分支的本地分支,若是有的话,找【最近】一次提交了的同事再次push一下就好。也可以不用找最近的,把自己的提交也行,若原本最新的同事也会继续提交的话,最终也会保持时最新的。第二种,若本地分支也没有了的情况,就需要使用一些命令了。比如我刚刚删除了本地和远端的dev分支第一步输入git reflog --date=iso$ git reflog --date=iso8eb0d82 (HEAD -&g原创 2021-01-07 11:09:24 · 13268 阅读 · 6 评论 -
简单理解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 · 2911 阅读 · 2 评论 -
简单理解java注解以及元注解@Retention
平时开发过程中经常使用注解,比如spring入参为指定值,校验java入参的值为规定的值,就使用了自定义的注解来规定指定值。还有最常见的重写@override等。注解就是为了贴标签,然后开发人员根据标签以及标签里设置值,进行不同的处理。那么以下面注解为例,简单说明一下@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})@Retention(RUNTIME)@Documented@Constraint(validated原创 2020-12-24 11:48:24 · 279 阅读 · 0 评论 -
简单理解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 · 292 阅读 · 0 评论 -
Optional联合Stream使用——集合判空或取值
jdk8Optional联合Stream使用简单判空取值原来判断 SspUnionPolicyDetailShowResp showResp = new SspUnionPolicyDetailShowResp(); InterestsCell interestsCell2 = new InterestsCell(); if (ObjectUtils.isNotEmpty(showResp) && ObjectUtils.原创 2020-12-17 21:18:55 · 7500 阅读 · 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 · 7275 阅读 · 0 评论 -
每一次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 · 1052 阅读 · 0 评论 -
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 · 1787 阅读 · 0 评论 -
MybatisGenerator处理父子项目、多模块不生成文件的问题
项目最近改造成了多模块项目,再使用MybatisGenerator的时候,发现执行不报错,但是就是不生成文件。仔细分析了generatorConfig.xml配置文件,发现需要修改dao、entity、mapper三处的targetProject值。需要加入新的子模块的名字。正确的如下图所示: <!-- 生成模型的包名和位置 --> <javaModelGenerator targetPackage="com.xxx.main.entity" targetProject原创 2020-11-10 19:10:56 · 849 阅读 · 0 评论 -
MybatisGenerator处理MySQLjson类型对应java的解决办法
mybatis的高级版本支持了json格式的字段,但是对于java而言,可以使用String与之对应。但是在使用MybatisGenerator时,生产的mapper.xml文件会生成Blob_Column_List这种额外的标签,而不是我们正常的熟悉String类型。如下图所示:如何去掉这些额外的东西,只需要修改配置文件里面的table标签的子标签columnOverride的jdbcType和javaType属性值<columnOverride column="claim_request_原创 2020-11-10 19:04:21 · 2640 阅读 · 1 评论 -
Power Designer反向生产模型——Power Designer一看就会——非常简单
经常使用Power Designer建立数据库模型,但是有时候,数据库已经建立了表,这个时候需要将表反向的生成到pdm文件中。所以记录一下过程:第一步:打开数据库软件,选择表,然后单击右键,选择转存sql文件,选择仅结构第二步打开pd,选择某一个模板,然后点击数据库,从数据库中更新模型然后选择我们刚刚存的sql文件之后就出现了我们想要的数据表模型了。【完】喜欢就点个赞呗正在去BAT的路上修行...原创 2020-10-30 18:54:37 · 382 阅读 · 0 评论 -
https真的安全吗?https一定安全吗?
不一定。现在我们是使用ca公钥对ca机构颁发的ca数字证书进行验证,基于对于CA的信任机制。所以这个信任机制有问题的话,那就可能不安全第一个方面,那么ca机构是否存在是假的吗?会存在,但是一般不会发生,因为公司一般去申请ca证书的时候,都会选择正规的CA机构。几乎不可能存在去假的CA机构进行验证。另外,虽然正规CA的公钥公开,即使这中间人解开了CA数字证书,也没法改变数据之后进行私钥加密,因为“中间人攻击”的中间人不会得到正规CA的私钥。只有公司去了假了CA机构申请,才会有私钥。第二个方面原创 2020-10-28 12:48:01 · 2616 阅读 · 0 评论 -
EL1041E: After parsing a valid expression, there is still more data in the expression: ‘comma(,)‘
出现这个东西的原因就是使用@Value设置的值出错了。比如 @Value("#{${gift.plan.code.list2}}") private List<String> giftPlanCodeList2;报错为Unsatisfied dependency expressed through field ‘giftPlanCodeList2’; nested exception is org.springframework.beans.factory.BeanEx原创 2020-10-27 16:13:18 · 19413 阅读 · 1 评论 -
HttpMessageNotReadableException: JSON parse error: syntax error, expect {, actual string, pos
json转换报错,提示为:content type [application/json]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: syntax error, expect {, actual string, pos 15396, fieldName planDate, fastjson-version 1.2.62; nested原创 2020-09-22 15:40:41 · 4632 阅读 · 1 评论 -
java获取IP——优雅的获取前端请求的IP——直接使用
场景:后端获取前端的ip是非常常见的操作,但是获取的办法网上也有,只不过过多的if有点不好看,本文就简单的优化了一下。 /** * 获取ip */ private String getIp(HttpServletRequest request) { String ip; List<String> ipHeadList = Stream.of("X-Forwarded-For", "Proxy-Client-IP", "WL-Pr原创 2020-09-07 18:38:59 · 8009 阅读 · 0 评论 -
fastjson小技巧——使用fastjson对枚举的序列化,返回属性code/desc等——一看就会
场景:在使用JSONObject.toJSONString(qsm)时,默认是打印枚举的name(),也就是枚举字面常量。有时候,返回前端,只想返回枚举里面的属性,比如代码标识code,或者描述,这样前端就不需要再存一套枚举与后端对应了。思路:可以将原本的枚举类型的属性不参与序列化和反序列化,再使用一个getter、setter方法来偷梁换柱的使用枚举值。这样就可以达到我们想要的效果。举例说明:public class LogController { public static void原创 2020-09-03 21:24:09 · 7876 阅读 · 1 评论 -
fastjson漏洞——举例说明漏洞以及原理分析——一看就会
最近公司一直说fastjson有漏洞,比较很严重,要换成其他的json工具。怀着好奇的心情去看了一些文章,现在简单的记录一下。1、漏洞分析总体而言是一个叫做autoType的在搞事情。那么autoType是什么呢?我们写一段简单代码演示一下:public class JSONController { public static void main(String[] args) throws ParseException { Province province = new原创 2020-09-01 22:05:47 · 5166 阅读 · 1 评论 -
FastJson小技巧——@JSONField的史上最全最详细讲解——一看就会
常见:使用fastjson进行需要对字段进行一些特殊处理,比如时间格式,前后端名字不一致,字段为null是否依然序列化等问题。那么fastjson的@JSONField就能很好的解决这些问题。@JSONField注解的源码如下@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })public @interface JSONField {原创 2020-09-01 11:57:52 · 27852 阅读 · 11 评论 -
fastjson小技巧——java对象,json对象,json数组,java集合的相互转换
json是我们经常使用的格式,我们也经常与java对象进行相互转化,比如打印对象的日志,或者存入redis等场景。那么他们之前的相互转化方法的名字很容易混淆,所以特此记录如下:public static void main(String[] args) { Nation nationBean1 = Nation.builder().name("汉族").dress("现代服饰").num(12342424).build(); Nation nationBe原创 2020-08-31 21:46:26 · 1089 阅读 · 0 评论 -
linux小技巧——使用MobaXterm宏进行linux批量命令执行——一看就会
场景:我们经常登录linux跳板机去查看应用的日志,但是看日志的时候,需要输入很多的命令,这些命令实际上,每一次输入都是重复的,特别是命令条数较多的时候,这样就很耗费时间。那么我们可以使用宏来批量的执行这些命令。步骤:1.登录跳板机可以使用ssh方式登录跳板机ip。点击确定。接下来就自动进入了终端2.录制宏点击左侧的宏工具,然后点击红色按钮,就可以开始录制宏。接下来每一次的输入的命令,和按的回车,已经时间都被记录了。所以这个时候就输入从正常查看日志的所有步骤的命令,到了能看日志的时候,原创 2020-08-28 18:42:48 · 26030 阅读 · 4 评论 -
GIT修改用户名——idea提交git用户名/名字不正确
这个问题是idea右键annotate查看谁编写的代码的时候,发现全部为e,而不是自己的名字。使用命令查看,发现用户不正确可以使用命令git config --list查看所有git配置信息,发现用户名为e,这是不正确的。使用命令git config --global user.name "your name"的是时候,显示错误,说mutil多个之类的提示,这个使用参数--replace-all全部替换就好。即:git config --replace-all --global user.nam原创 2020-08-25 10:38:48 · 5033 阅读 · 0 评论