- 博客(491)
- 资源 (16)
- 收藏
- 关注
原创 @Options(useGeneratedKeys = true, keyProperty = “id“, keyColumn = “id“,mybatis主键自增长,返回主键值配置问题
在很多场景下,会将某个实体的主键设为自增长,但在某些场景下,需要在实体插入数据的同时就获取该实体的主键值;例如在用户注册时,我们需要将用户信息插入用户表,同时,我们需要生成一条与用户关联的另一张表的记录,在同一段逻辑代码中,就需要用户信息插入的同时,返回自增长的主键用以关联其他信息,mybatis配置方式如下。实体类@Getter@Setter@ToString@TableName("acc_sys_t_user")public class SysUser implements S..
2022-03-07 09:51:24
2546
原创 一把锁引发的问题,synchronized方法与非synchronized方法共存产生数据脏读问题
模拟场景:写一段小程序,一个方法给某人账户充值,另一个方法查询某人的账户,如果两个方法都不加锁,并发情况下肯定会问题,现在只给充值方法加锁,查询方法不加,由于synchronized与非synchronized方法可以同时运行,所以查询方法可能产生脏读问题。public class Account { String name; double balance; public synchronized void setBalance(String name, do..
2022-01-27 17:28:55
393
原创 一道面试题引出的Java加载、链接与初始化verification、preparation、resolution、initialization过程
背景试题case 1public class JavaLoading { private static int NUM = 3; private static JavaLoading INSTANCE = new JavaLoading(); private JavaLoading() { NUM++; } public static void main(String[] args) { System.out.prin
2022-01-10 11:17:18
439
原创 8位的能表示的范围是±2^7(最高位做符号位),也就是±128,为什么单精度浮点数的指数范围却是-126~127呢?
8个字节的能表示的范围是±2^7(最高位做符号位),也就是±128,为什么单精度浮点数的指数范围却是-126~127呢?我是在《计算机组成原理》一书中解开迷惑的按照IEEE754标准规定,浮点数的表示方式如下中间的8位数阶码是无符号数,原本它的范围是0~2^8,即0~256IEEE754规定只取1~254最为阶码的取值范围,255和0用于表示特殊值。阶码与实际指数之间满足如下关系:阶码=127+实际指数值所以实际指数的范围就是1-127~254-127,即-1..
2021-12-31 14:54:17
2063
2
原创 java堆与方法区、运行时常量池的关系
援引在《The Java Virtual Machine Specification Java SE 14 Edition》中描述对堆得描述The Java Virtual Machine has a heap that is shared among all Java Virtual Machine threads. The heap is the run-time data area from which memory for all class instances and arr
2021-12-31 14:30:53
514
原创 同样是32位,为什么float能表示的数据范围比int的大?
System.out.println("Float.MAX_VALUE:"+Float.MAX_VALUE); System.out.println("Integer.MAX_VALUE:"+Integer.MAX_VALUE); System.out.println("Integer.MIN_VALUE:"+Integer.MIN_VALUE);Float.MAX_VALUE:3.4028235E38Integer.MAX_VALUE:2147483647Integer.MIN_VALU..
2021-12-28 16:22:58
4316
原创 springboot官方修复 Apache Log4j任意代码执行漏洞修复 spring-boot-starter-log4j2
Log4j2爆出的史诗级漏洞,springboot官方怎么可能没有动作呢?意思就是不需要那么多花里胡哨的,只需要在properties中配置一下,指定log4j的 版本即可<properties> <log4j2.version>2.15.0</log4j2.version></properties>落实到项目就是:构建的版本如下:...
2021-12-11 14:53:02
4630
原创 springboot 自定义注解+拦截器+Redis实现限流,防止恶意刷接口实践
自定义注解,具体频次,根据具体场景设置import java.lang.annotation.*;@Inherited@Documented@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)/** * 限流注解 */public @interface AccessLimit { //标识 指定sec时间段内的访问次数限制
2021-11-18 11:39:29
1015
原创 深度剖析JVM常量池,String字符串相关八股文,茴香豆的茴有几种写法?
最近看到一篇非常有深度的博文,用流行语说就是——整的我都不会了!有兴趣的可以来挑战一下,文末有原文链接!盲猜1String a="Mic";String b="Mic";assert(a==b);盲猜2String a =new String(new char[]{'a','b','c'}); String b = a.intern(); System.out.println(a == b);盲猜3 String x =new String("def");
2021-11-09 16:55:02
309
原创 cypher neo4j 简单的增删改查
CREATE (n:User { name: '胡汉三', desc: '组长' }) return n;CREATE (n:User { name: '杨金水', desc: '老板' }) return n;CREATE (n:User { name: '刘武宗', desc: '组员' }) return n;CREATE (n:User { name: '龙追风', desc: '组员' }) return n;CREATE (n:User { name: '林梓阳', ...
2021-11-03 14:38:06
324
原创 linux环境日志排查,cat命令关键字查找、最近1000条、定位到指定位置
cat 命令(文本输出命令)通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行:显示file文件里匹配nick那行以及上下5行cat error.log | grep -C 5 'nick'显示nick及前5行cat error.log | grep -B 5 'nick'cat error.log | grep -A 5 'nick'显示nick及后5行less 命令(分页查看文件内容)分页查看日志,但
2021-10-27 10:08:00
11118
原创 数据实测告诉你:不要人云亦云的瞎说EXISTS 与 in 的区别
背景实践过程中发现了MySQL一些慢查询,主要出现在in关键字上,查阅相关资料,众多博客都在分析in和 EXISTS 的区别与各自的适用场景,很多都是如下一般,直接给出结论,却没有数据支撑的。他们的结论言之凿凿的说:in()适合B表比A表数据小的情况exists()适合B表比A表数据大的情况我在实测过程中发现,在5.7环境下,无论是大表驱动小表,还是小表驱动大表,in的速度都优于exists,这不由得让我产生了怀疑。环境准备安装两个版本的数据库各一...
2021-10-14 11:37:32
1756
18
原创 Windows10 安装mysql 8 ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘
搜索结果第二个:链接在下面????????????MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/Downloads No thanks, just start my download.解压添加一个环境变量配置my.ini文件解压文件中没有my.ini,自己动手建一个,涉及路径自行修改,里面有个data的路径,将来数据放这里
2021-10-13 19:01:08
399
原创 技术人的开悟之旅
长期以来,思想颇为混沌讲道理代码人不应该混沌,零就是零,一就是一但最近越发感觉混沌了,很多事情想不明白很多事情想得太明白,比如突然发现——技术其实没有想象中的那么重要信仰技术可以改变世界,可能这句话是正确的只不过,是建立在你已经对这个世界有了足够的认识的基础之上的改变世界,首先你得知道为什么要改变,改变哪里,从什么样改到什么样所以归根结底还是要提升认知,认识这个世界,深度思考它存在的问题,并且提出自己的解决方案然后才是用技术去实现这个解决方案,用来
2021-08-24 10:44:43
151
原创 走读源码探究HashMap的树化时机以及红黑树的操作机制
通过两篇文章:深入源码分析HashMap到底是怎样将元素put进去的 和 HashMap扩容后,元素是如何重新分布的,我们逐一分析了HashMap的初始化和扩容机制,在末尾还留下了一个悬念,就是HashMap的树化,即什么时候转化成红黑树,以及怎么转成红黑树的没有深入探究,今天我们就来通过走读代码,一步一步走进HashMap的红黑树。目的探究Node转化成TreeNode的时机以及TreeNode的操作机制说明本次探究使用的jdk版本:1.8HashMap结构示意图思路通过以往的两次分析,我
2021-04-15 15:02:16
558
1
原创 关于技术分享的思考
故事起因讲一个自己的故事,应网友的请求,帮他找一个人,这个人与他通过支付宝发生过金钱上的来往,后面可能是产生了什么纠纷,具体原因我也不太清楚,他的请求就是:能不能通过支付宝上的转账记录查询到对方的手机号。由于支付宝的隐私机制,如果对方的手机号不存在你的手机通讯录中,你是看不到对方的完整手机号的,只能看到前三位和后两位,转账的时候能看到对方的头像与昵称数额比较大的时候还能知道对方的名字,但就是无法看到完整的11位的手机号上面这段话,有个很重要的隐含条件,对方的手机号存在你的手机通讯录中,那我就可以通过支
2021-03-31 11:45:34
295
3
原创 如何将excel中的电话号码快速导入添加到手机上?
如何将excel中的电话号码快速添加到手机上?先将号码复制到txt文档再参考这个:如何将txt文档里面的电话号码快速转换为vcf格式的电话簿导入手机
2021-03-30 18:21:08
2332
原创 如何将txt、excel文档里面的电话号码快速转换为vcf格式的电话簿导入手机
研究了一下标准vcf格式文件长什么样子BEGIN:VCARDFN:385TEL;type=CELL;type=VOICE;type=pref:18306228829CID:12109794182UID:12109794182VERSION:3.0END:VCARDBEGIN:VCARD长上面那样,FN是名字,pref后面的是手机号,CID=UID是个唯一码既然知道它长什么样,就不用那么复杂的去借助其他工具转换自己动手丰衣足食,直接读取号码,生成vcf文件代码如下 public s
2021-03-30 18:17:32
6038
5
原创 java正则表达式文本处理,将N个换行替换成单个
/** * 多个换行改成一个 * @param content * @return */ public static String replaceMultipleLineFeedsWithOne(String content){ Pattern p1 = Pattern.compile("(\r?\n(\\s*\r?\n)+)"); Matcher m1 = p1.matcher(content); r...
2021-03-11 10:54:12
919
原创 国内版Clubhouse,「对话吧」APP,邀请码
近来Clubhouse火遍互联网,国内各大厂商也摩拳擦掌,“对话吧”率先抢跑,本着对新鲜事物充满好奇的想法,来体验一把。1.下载‘对话吧’官方应用商店下载即可。2.选择被邀请,邀请码填,蒋昌建,朱啸虎,奉佑生,马力,包凡,周亚辉,任意一个大佬人名即可...
2021-02-21 11:14:12
1094
原创 java匹配文本中的电话号码,并将中间四位替换为*
java匹配一段文本中的电话号码,并将中间四位替换为*代码片段 public static final String REGEX_MOBILE = "(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}"; public static String regexMobile(String content){ Pattern p = Pattern.compile(REGEX_MOBILE
2021-01-21 15:02:20
2256
原创 一文教你让腾讯、阿里、美团、拼多多的码农给你打工——如何选择中概互联网基金
最近经常有小伙伴问,阿里跌了这么多,可以买了吗?先说观点:当然可以买,而且可以长期买,长期持有!正文:由于前期的蚂蚁暂停上市和后面的反垄断调查,阿里陷入了舆论的旋涡,股价已经从高点回落30%+现在的阿里还可以买吗?作为一个优秀的韭菜,肯定知道鸡蛋不能放在同一个篮子里,其实阿里只是中国在海外(包括香港)上市的互联网企业的代表,问阿里能不能买其实约等于问中概股能不能买。先说观点:当然可以买,而且可以长期买,长期持有!周所周知,由于各种原因吧,中国体量最大、影响力最大、市值最高、增速最快的公司,
2021-01-01 17:19:38
2155
1
原创 linux快速重启java jar文件的shell命令
新建重启脚本,vi restart.sh,输入以下内容,按自己应用名修改部分#!/bin/bash# 默认应用名称defaultAppName='mobile-api.jar'appName=''if [[ $1 && $1 != 0 ]]then appName=$1else appName=$defaultAppNamefiecho ">>>>>>本次重启的应用: $appName <<
2020-12-16 11:09:53
2847
原创 Unable to access jarfile ApacheJMeter.jar
玩一把压测工具,JMeter,下载source解压后Unable to access jarfile ApacheJMeter.jar之前下载的是源码,里面确实没有ApacheJMeter.jar改下载这个,Binaries的 apache-jmeter-5.3.zip sha512 pgp下载解压,打开jmeter.bat,这就很棒了...
2020-12-02 10:44:12
386
1
原创 synchronized实现两个线程交替运行
背景用两个线程交替输出A-Z和1-26,即一个线程输出A-Z,另一个线程输出1-26而且是交替形式线程1输出A——线程二输出1线程1输出B——线程二输出2线程1输出C——线程二输出3以此类推分析主要考察线程之间的通信,思路就是创建两个线程在一个线程输出一个内容之后,自己进入阻塞,去唤醒另一个线程另一个线程同样,输出一个内容之后,自己进入阻塞,去唤醒另一个线程代码实现(一)public class AlternateCover { public static void m
2020-10-26 15:07:27
718
3
原创 如何抄基金经理的作业?查看并参考优秀基金经理的历史持仓数据
如何抄基金经理的作业?其实起始这话不严谨,一般人抄不到基金经理的作业因为基金经理的持仓是人家的机密,吃饭的家伙,如果人人都知道,谁还去买他的基金呢?但我们可以参考优秀基金经理的选股策略,特别是那些业绩长期保持优秀的基金经理因为长期保持优秀的基金经理,他们的投资风格比较稳健,布局也偏长线作为一个合格的韭菜,应该知道基金的持仓会每个季度公布一次所以严格来说当我们看到基金持仓的那一瞬间,这个数据就已经是历史数据了在你看的这个点,没准他已经完成了调仓这个也可以解释为什么有时候蚂蚁财富的基金预计涨跌幅
2020-09-27 16:19:22
4028
原创 java中的“我”不是“我”,NaN特殊标识以及正无穷+负无穷应该等于多少?
上文:Java虚拟机规范.Java SE 8版中关于浮点类型的说明,Infinity和-Infinity给大家提到一个小的知识点,即浮点数的0,它有正负之分作为分母不会产生java.lang.ArithmeticException: / by zero,而是得到正负无穷大,至于为什么,这是IEEE 754标准定义的在《Java虚拟机规范.Java SE 8版》第二章第三节有如下描述那我就好奇了,你说正无穷+负无穷应该等于多少,会是零吗? public static void main(S
2020-09-26 11:38:58
1064
原创 Java虚拟机规范.Java SE 8版中关于浮点类型的说明,Infinity和-Infinity
在我们的经验中除数是不可以为零的,否则java.lang.ArithmeticException: / by zero在等您但是浮点数可就不一定了在第二章2.3.2节《浮点类型、取值集合及浮点值》中有这样的表述代码验证一下 public static void main(String[] args) { float f1 = 1f; float f2 = 0.0f; float f3 = -0.0f; System.out.pri
2020-09-26 11:10:30
287
原创 关于java的switch接收字符串底层实现逻辑
看一段代码,这是一道试题,思考一下,结果是什么?为什么?package cn.com.suntree.utils.myself;public class SwitchTest { public static void main(String[] args) { String paramStr = null; switch (paramStr){ case "boy": break;
2020-09-24 18:24:35
663
原创 使用LinkedHashMap实现简单的LRU
LRU在很多缓存失效策略中会涉及,本质是一种节约更公平的节约资源策略,最近最少使用java中的LinkedHashMap就有自带的实现LRU简单说一下LinkedHashMap这种数据结构,本质是HashMap+双向链表,不仅有HashMap的特性,还能维护元素的顺序,示意图如下使用LinkedHashMap实现简单的LRUpackage cn.com.suntree.utils.myself;import java.util.LinkedHashMap;import java.util.M
2020-09-22 14:15:28
969
原创 说好的牛市来了,我的股票怎么跌停了?
讲个故事:有个一商人到了一个山村,子村周围的上山全是猴子。商人就和子村种地的农民说,我买猴子,001元一只。村民不知是真是假,试着抓猴子,人商果然给了100元。于是全村的人都去抓猴子,比这种地合算得多了。快很商人买了两千多只猴子,山上猴子很少了。人商这时又出价200元只一买猴子,村民见价猴翻番,便又纷纷去抓,商人又买了,但猴子已经难很抓到了。商人又出价300元只一买猴子,子猴几乎抓不到了。商人
2020-09-22 09:43:05
352
原创 探究java类的加载顺序
基类public class Father { private int i = testFather(); // 6 private static int f = method();// 1 static { System.out.println("父类静态代码块被加载");// 2 } private static int f2 = method2();// 3 Father(){ // 9 System.out.
2020-09-21 14:53:35
195
原创 阿里巴巴难度系数五颗星的试题,小白竟然说很简单
牛客网上有道阿里巴巴的面试题,网站显示该题难度系数五颗星代码如下:public class Base{ private String baseName = "base"; public Base(){ callName(); } public void callName(){ System. out. println(baseName); } static class Sub extends Base{
2020-09-19 16:09:20
430
原创 面试官问你HashMap为什么线程不安全,体现在哪?举个例子看看?
看过我HashMap系列教程的人都应该对HashMap的原理都有了比较深的理解深入源码分析HashMap到底是怎样将元素put进去的HashMap扩容后,元素是如何重新分布的”准备用HashMap存1w条数据,构造时传10000会触发扩容吗?“java的hashmap,如果确定只装载100个元素,new HashMap(?)多少是最佳的,why?读HashMap源码之tableSizeFor大家都知道HashMap是线程不安全的,可是为什么是不安全的呢?其实我们看一下源码就知道final V
2020-09-14 15:33:47
1340
1
原创 List<? extends T>和List<? super T>之间的区别
定义几个基础类// 动物类,一个吃方法public static class Animal { public void eat() { System.out.println("Animal eat"); } }// 鸟继承自动物,一个飞方法public static class Birds extends Animal { public void fly() { System.out.prin
2020-09-12 16:04:43
4867
4
原创 HashMap扩容后,元素是如何重新分布的
上文回顾在上文深入源码分析HashMap到底是怎样将元素put进去的我们着重分析了无参构造函数是如何创建map对象和HashMap是如何将第一个元素put进table的。此篇重点这篇我们将逐行代码分析1、有参构造函数是如何创建map对象的2、当元素增多导致扩容之后,元素是如何重新分布的同样,为了方便读者复盘,我截取源码是尽量将行号带上。jdk版本还是1.8结构图再重复一遍,HashMap的底层数据结构为数组+链表+红黑树的结构,放一个HashMap的结构示意图,有个大致印象。解剖思路
2020-09-10 11:39:08
6688
8
原创 深入源码分析HashMap到底是怎样将元素put进去的
说明此次深入源码解剖是为了搞明白几个问题1、HashMap是如何初始化的2、HashMap的扩容机制是怎样的3、元素是put进HashMap的,具体位置在哪(重难点)4、扩容后,元素是如何重新分布的(重难点)注:为了方便读者复盘,我截取源码时会将源码行号也带上。jdk版本:1.8在深入源码之前,应该先有个大致的了解,在JDK8里面,HashMap的底层数据结构已经变为数组+链表+红黑树的结构HashMap结构示意图数组就是源码中的table链表就是内部类Node红黑树就是内部类
2020-09-09 12:00:18
1431
4
原创 IDEA调试操作键说明
启动debug模式运行程序Step Over单步调试,一行一行方法执行Step Into进入方法细节,但只会进入自定义方法,不会进入系统级源码Force Step Into也是进入方法细节,可以进入系统级源码,调试源码经常就是用它进入Step Out跳出正在执行的方法,返回上一层的下一行Drop Frame这是在运行过程中会经常用到,运行到一半自己绕晕了,需要重新开始运行,用它返回上一个方法的起点,然后继续单步调试...
2020-09-09 10:23:01
534
redis的部分可用windows版本.txt
2020-09-24
代码统计工具(SourceCounter)
2018-06-15
https双向认证所需jar
2017-09-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅