- 博客(30)
- 收藏
- 关注
原创 搭建个人博客(一):Hugo 框架构建网站
搭建一个属于自己的个人博客网站,这种想法由来已久。之前也尝试过,但结果不尽如人意。最近无意中知晓Hugo这种框架,无需编写前端代码通过一些参数配置修改就可定制自己想要的博客网站,于是又开始熬夜了。。。HUGO 框架(点此传送官网)果然厉害的东西,愿景标语都是如此刚。尝试搭建之后确实比较有意思。他是用go语言编写实现的静态网站生成器。因为阿雷没接触过go语言,所以本文是小白文,只会介绍框架的使用方法。ps:这个框架的中文阿雷一直读作虎狗,查了下中文翻译竟然是雨果。。。下载(传送门)官方介绍了好几.
2021-10-04 21:04:00
1058
原创 Vmware虚拟机如何设置固定IP
前言:虚拟机相信各位小伙伴一定不陌生,我们平时在做项目框架搭建和测试时为了模拟多机器环境经常会用到,但对于初学者不太友好的就是,如果虚拟机或自己的电脑重启了后,虚拟机的IP就变了,这样就使得你不得不去修改项目里配置IP地址,就很麻烦。如果有这种问题的同学,可以接着往下看。注意:本文以centos7 64版本系统为例,其他也大同小异,此处以NAT模式进行配置,仅用作参考。首先我们需要将虚拟机中对应系统的网络适配器改成NAT模式然后再点击Vmware“虚拟网络编辑器”,配置NAT模式网卡(一般写.
2021-07-19 23:10:51
20381
5
原创 编译spring的源码
前言:对于java开发人员来说,spring是必会的一门框架了,于初学者而言,能熟练使用spring就已经很ok了,但对于一匹老码来说,就须得知其然也要知其所以然了,所以从今天起就要开始快乐的学习源码了。今天就索性把源码下载编译出来。1,下载源代码进入spring官网,访问地址如下(可跳过此处直接访问步骤二中的地址):https://spring.io/projects/spring-framework点击git图标,就来到了spring项目的下载页面,如下:https://githu.
2021-07-15 22:58:56
349
原创 MVCC处理可重复读理解
前言:通过上节我们知道Mysql将事务设置为可重复读隔离级别后可以避免数据脏读和不可重复读问题。那么可重复读具体是怎样实现的呢?MVCC是个啥?可以接着往下看。我们先看一下定义(维基百科):多版本并发控制(Multiversion concurrency control, MCC 或 MVCC),是数据库管理系统常用的一种并发控制,也用于程序设计语言实现事务内存。MVCC意图解决读写锁造成的多个、长时间的读操作饿死写操作问题。每个事务读到的数据项都是一个历史快照(snapshot)并依赖于实现的.
2021-07-05 01:26:34
486
原创 Mysql事务隔离级别
前言:从最开始的手工写begin,commit语句,到现在的@Transtional注解,事务看似不起眼也很容易使用,只有在真正接触后发现,确实没什么用。转眼已到七月,夏日炎炎正好眠,所以阿雷打算肝完这节就去睡(来自凌晨一点的问候)。一,事务基本操作,ACID原子性(Atomicity):这点很好理解。在程序运行过程中,同一个事务里的操作要么都成功,要么都失败(经常案例就是银行的转账,一边扣钱,一边加钱,不能只扣不加)。一致性(Consistent):在事务开始之前和事务结束以后,数据库的完整.
2021-07-03 01:09:45
71
原创 由mysql索引想到的几种“树”据结构
前言:最近阿雷在学习关于mysql查询优化中到get一个重要的知识点:索引。虽然以前知道索引,但对索引的了解也仅仅是停留在创建索引层面。所以这几天稍微更深层了解了下,以作后记(这里只讨论mysql)。1,什么是索引官方定义:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。上面说了一大堆,据阿雷了解.
2021-07-01 01:37:00
133
原创 JVM常见面试题
前言:本节主要复习下之前所讲过的一些知识点,整理出一些面试题,供各位大佬享用。Java类加载过程类加载器加载class可以大致分为:加载 >> 验证 >> 准备 >> 解析 >> 初始化1)加载:从磁盘中读取字节码文件放入运行时数据区。该过程会产生供开发人员使用的Class对象(如获取类的所有属性,所有方法等)。并且只有在程序运行到要使用该类时才会加载(通过new关键字等)。2)校验:校验字节码文件格式的正确性(魔数:CAFE BABE)3.
2021-06-25 00:08:13
96
原创 并发收集,三色标记算法
前言:之前我们讲过CMS收集器的回收过程,有一步骤是并发标记,他会在不停止应用线程的情况下判断是否为垃圾对象。感觉就像是你在家里打扫卫生时,你儿子又在一旁丢垃圾一样。这些新出现的垃圾如何处理?再有你认为是垃圾的东西,你儿子却又拿过去玩怎么办?相反你认为有用的东西,实际上又变成垃圾了咋整?一,三色标记概念这里三色可以理解为gc过程中对象的扫描状态。采用可达性分析算法,从Gc Roots逐级往下查找。黑色:表示当前对象已经被垃圾收集器访问过,并且对象里面的所有引用都扫描过。表示对象是存活的灰色:表示.
2021-06-23 00:47:40
238
原创 Java大头:垃圾收集器(三)
前言:Garbage-First收集器主要应用在配备大内存,多核处理器的机器上面。他以高概率满足垃圾收集暂停时间目标,同时在几乎不需要配置的情况下实现高吞吐量。G1 旨在使当前应用程序和环境在停顿和吞吐量之间提供最佳平衡。一,堆组成与布局图中:浅灰色代表空白,红色代表Eden区,红色+S代表Survivor区,蓝色代表老年代,蓝色+H代表Humongous(专门存放大对象的区域)。由上图我们可以知道G1将我们堆区域或分成许多小格子(Region),Region的大小都相等,最多可以有2048个R.
2021-06-20 23:55:20
96
原创 Java大头:垃圾收集器(二)
前言:话接上篇讲了垃圾收集器的几大算法,本篇主要讲对应算法的一些实现。话不多说,先看一张图。图中主要介绍了目前主流的几款垃圾收集器(图中连线表示可以组合收集,不过CMS到Serial Old除外,我标为了红色)。其中Serial,ParNew,Parallel主要负责对年轻代的垃圾回收,CMS,Serial Old,Parallel Old,则是主要对老年代的垃圾回收,G1垃圾收集器就比较厉害,年轻代和老年代都由他收集。就目前而言,没有万能的垃圾收集器,我们需要依据自身的业务情况来选择不同的垃圾.
2021-06-18 23:10:14
93
原创 Java大头:垃圾收集器(一)
前言:万事开头难,先从基础概念讲起吧,老规矩,还是以JDK8版本主讲。一,垃圾收集算法复制算法:将内存分为大小相同的两块(运行区域,预留区域 ),每次分配的对象都存放在运行区域,当运行区域内存不够时,会将存活的对象复制到预留区域,然后清理垃圾对象,结束后运行区域就转变为预留区域,而预留区域就变成了运行区域(有点像survivorFrom和SurvivorTo)标记清除算法:先做标记,再去清除。一般是标记存活的对象,然后统一回收未标记的垃圾对象。标记整理算法:标记整理算法的标记阶段.
2021-06-17 00:16:44
96
原创 jstack学习:找出cpu飙升代码
前言:虽然现在有像arthas这样强大的调优诊断工具,但懂得操作基础命令也是一项永远不会过时的技能。在某一个漆黑的夜晚,我们努力肝了一个新版本发布上去,第二天却收到服务器告警一查是CPU飙高持续不下,那是什么心情?kill一个程序员祭天吧。阿雷会先把旧版本启动并将用户请求切到旧版本上,然后再慢慢找原因。。。为了模拟这种情况,我写了串代码这代码:package com.test;public class Test { public int cal(){ int .
2021-06-14 22:31:34
179
原创 重识HashMap(三)
前言:面试官:HashMap多线程安全么?不安全,为啥不安全?上一期我们看了HashMap#put方法的执行过程,通过源码很容易找出个答案回怼面试官,看下图。当两个线程A,B同时拿到modCount同时进行逻辑操作时,就会导致结果不正确。这点好理解。比如A,B线程同时拿到modCount=10,++操作结束后modCount=11,实际应该是12。还有吗?有。再看下这两行代码:这里会产生数据覆盖的问题。正常情况下,当key的hash值算出来落到同一个i位置时,会产生链表,但在多线程情况下.
2021-06-12 22:52:22
125
原创 重识HashMap(二)
前言:没想到短短的一个put方法,竟然有这么多逻辑。。。Hello,昨天大概讲了下HashMap中几个重要的默认值以及HashMap的构造函数,今天主要想看一下存储数据的过程,即HashMap中put方法的实现。public V put(K key, V value) { //1,先将key进行hash扰动 //2,调用putVal方法 return putVal(hash(key), key, value, false, true);}//存储所有元素的数组,默认为nulltra.
2021-06-10 23:19:44
83
原创 重识HashMap(一)
前言:当我意识到我对HashMap的了解还停留在键值对,线程不安全的时,我心里咯噔了一下,我想是时候重新认识一下他,希望这种觉悟还不太晚。
2021-06-09 23:21:09
321
7
原创 理解下栈上分配机制
我们一般认为Java中创建的对象是放到堆里面的,但Java为了达到更高的性能要求,在高版本(此处指JDK8)中,有时会将对象直接生成在栈里面,比如我们常说的栈上分配。我们都知道堆里面的对象回收,是需要等垃圾收集器处理的,但栈中的对象是随着方法调用结束而自行销毁,这样能达到更快释放的效果。那么栈上分配是怎样实现的呢?这里要说到两种机制:一,逃逸分析既然是逃逸,首先得有个“牢房”,在这里可以把每个方法当成一个“牢房”,每一个方法里的对象就是“囚犯”,那怎样逃呢?当我们return 对象返回上级方法.
2021-06-07 23:27:23
312
原创 i++和++i到底怎样执行的?
前言:i++和++i的区别是什么?大家伙肯定会想到答案: i++先赋值在运算;++i是先运算在赋值;这个问题也算是比较基础的问题了,一般笔试也比较喜欢问。那到底是怎样执行的呢?先看下代码:int i = 0;System.out.println(i++);int k = 0;System.out.println(++k);输出结果分别是0和1。得出结论是:i++先赋值在运算;++i是先运算在赋值结果大伙都知道,那怎样去理解呢?我们先看下i++反编译下的代码逻辑: public.
2021-06-06 23:45:50
800
原创 多年后才知道Integer判断相等有这个坑
前言:今天在改完代码后进行接口测试时,突然发现自己写的一个接口一直提示错误,检查代码查发现这个坑。逻辑是这样的,我在controller层方法里面判断service方法返回的结果code如果是1000,则表示逻辑处理成功,否则处理失败。处理逻辑大概如下所示public class Test { //定义表示成功的代码 public static final Integer SUCCESS_CODE = 1000; //定义了响应结果 class Response{.
2021-06-05 23:03:52
118
原创 干掉你写的 obj != null吧,真心不好看
前言:在平时开发过程中,字符串的非空判断时有发生,我们最常用到的a != null && !"".equals(a) 虽然没啥问题,但是真心不好看,这里有一些其他的非空校验方法希望可以帮到你。一,StringUtils类//该类提供了一系列关于字符串类型的操作方法,如非空校验,包含判断等//引入依赖使用:<dependency> <groupId>commons-lang</groupId> <artifactId>.
2021-06-04 22:25:50
116
原创 JVM内存结构详解
前言:JVM就是我们平时开发经常提到的Java虚拟机(Java Virtual Machine),既然是虚拟机,那他肯定具备真实计算机的功能,只不过不是从硬件层面真实体现。那么JVM具体包含些什么?本文通过一个示例作出解析。一,结构图我先标在这里,方便有个整体的记忆。二,写一个简单的例子public class Test { //计算 public int calc(){ int a = 1; //第三处代码 .
2021-06-03 22:49:47
67
原创 假如躺平也开始内卷。。。
前台:各位码友,今天不说技术,聊聊最近比较火的两个词,内卷和躺平。内卷和躺平啥意思?内卷:本意是指人类社会在一个发展阶段达到某种确定的形式后,停滞不前或无法转化为另一种高级模式的现象。 当社会资源无法满足所有人的需求时,人们通过竞争来获取更多资源。 经网络流传,很多高等学校学生用其来指代非理性的内部竞争或“被自愿”竞争。(源自百度百科)躺平:指无论对方做出什么反应,你内心都毫无波澜,对此不会有任何反应或者反抗,表示顺从心理。另外在部分语境总表示为:瘫倒在地,不再鸡血沸腾、渴求成功了。(源自百.
2021-06-02 15:03:23
221
原创 搞了一天的String#internal,终于想通了
前言:铁汁们,今天又是代码被虐爆肝的一天,被啥虐了嘞,看标题就知道了,话不多说上代码。public class StringInternTest { public static void main(String[] args) { String s1 = "1"; String s= new String("1"); s.intern(); System.out.println(s == s1); Strin.
2021-06-01 23:16:44
303
原创 5月收官,编程语言排名的后宫大戏
前言:看到Java和Python的相爱相杀,我脑补出了一部后宫争斗大戏(无语言歧视,只是娱乐,皮一下各位看观请轻喷~)。演员表(角色按排名分配)语言角色C皇后Python贵妃Java贵妃C++贵妃C#妃PHP嫔其他群演后宫月度总结大会进行中…C皇后:各位妹妹,这月末总结又到了,各位的KPI也都出来了,表现得怎么样,大伙都说说吧。(凭老娘的位份,都懒得瞅你们)。Python贵妃:(抢着开口)C姐姐,都是妹妹的错.
2021-05-31 17:00:35
89
原创 App发送短信验证码实现
前言: 现如今,电话是接外卖和快递的,短信是用来收验证码的。那么如何在App里面使用手机号+验证码的方式实现快速注册或登录呢?这篇文章可能帮到你。
2021-05-30 13:23:11
1976
原创 双亲委派机制笔记
1,什么是双亲委派机制?我的理解是,在java中,当类加载器需要对class文件进行加载时,会递归调用父加载器,当父加载器加载失败时,再向下递归传递进行加载,最后加载成功或失败。(感觉有点绕~)2,类加载器有哪些?3,执行流程是怎样的?4,优点1,安全加载:当加载类时,先委托父加载器加载可以避免破坏我们核心包里面的类。如我们可以项目里面建一个java.lang.String的类,但这样运行时实际找到的是Bootstrap ClassLoad加载的核心包里面的String,从而起到保护作用
2021-05-29 14:31:27
43
原创 springboot + log4j2 演示demo
项目中一直有使用日志,以前都是面向CV编程,今天整理了下常用的两种输出方式(ConsoleAppendert和RollingRandomAccessAppender)和经常搞混的PatternLayout格式,还有Logger节点里的additivity属性,留下个笔记。Demo下载地址ConsoleAppender点击查看示例<Console name="console1" target="SYSTEM_OUT"> <PatternLayout pattern="%.
2021-04-23 17:06:55
225
原创 IntelliJ IDEA 忽略项目文件
网上的说明太多了,这里只是自己记一下步骤1,打开Settings设置2,找到Editor -> File Types,填写要忽略的文件后辍,确认保存即可
2021-04-15 11:27:26
659
原创 同一域名出现部份地址跨域问题
同一域名出现部份地址跨域问题1,首先我确定我的nginx是做了处理的,允许跨域请求2,百度了一下说是有options的问题,于是就加上了这样一句代码3,实在没办法了感觉要吸氧了,最后就只能对比以前可以访问的接口来看为啥不行了。一看不要紧,一看日志我就知道啥错了。4,竟然是前端自己在header里面的参数写错了,我又没在ng里面配,于是我就把这个参数加到了add_header Access-Control-Allow-Headers里面,就解决了。5,总结一下:今天跟前端同事联调接口时发现一个非常奇葩的事情
2021-04-01 11:41:50
3158
原创 docker安装redis使用自定义配置,启动失败
docker安装redis使用自定义配置,启动失败代码如下:docker run -p 6379:6379 --name redis-test -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf-v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes但是始终不行,后来查原因为【redis
2021-03-30 16:57:44
1143
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人