自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 资源 (1)
  • 收藏
  • 关注

原创 [腾讯提前批】2022春招实习开始,可内推任意部门

如何投递:点击下方链接即可投递,提前批阶段可自主选择投递部门,通常正式批只能选择投递bg,强烈建议选择中意的部门进行投递,没有被意向部门选中的同学也会被放到公共池子让其他部门进行捞简历。请点击https://join.qq.com/judgetalent.html?rec_key=W0Zv482Q9NY7v0N5ntKlB9xyDLe9tsfYflaHg1nsspMQ&A:Q:提前批的安排?A:今年的校园招聘统一在线上进行,大多数岗位的offer,将会在提前批发放给通过面试的同学。部分岗位会在

2022-03-12 11:35:48 1605

原创 为什么const函数不能修改对象的内容

什么是const成员函数?std::string isbn() const {}简单的说就是在函数后面加个const。这样该函数就不能够修改函数对象内容了。原因如果没有加const,this指针类型是 object *constobject 是this指针指向的对象如果加了const之后,this指针类型是 const object * const 即为常量指针指向常量内容,既然都是指向常量内容了,那当然不能改修改。...

2021-01-18 16:12:44 837

原创 我血的教训告诉你,秋招一定要集邮

可能有人看到这个标题就非常气愤,直接找我开骂。可是还是要告诉你们一定要集邮!!!如果大家有经常看牛客会发现,秋招的过程中大家都在发帖,求求大佬不要集邮,你多拿一个offer,世界上就有一个人找不到工作。过了一两个月……大家正式的offer下来了,一堆人有在发帖,《我后悔没集邮》,《明年秋招的学弟学妹,我劝你集邮》等等听起来很搞笑,事实上就是我们太年轻了,没有经验,以为拿了一个大厂offer就感觉非常满意了。如果你们不信我在牛客截图给你们看。image-20201222154001809注意看.

2020-12-23 10:54:52 479 1

原创 双非本科拿到阿里腾讯字节,分享Java后端路线

前言最近有很多小师妹来问我。师妹:师兄~看了你之前的从腾讯到阿里,最后选择字节,觉得你特别厉害,请问你是怎么进BAT的呀,能不能告诉我你的学习路线呀~既然小师妹都这么问了,那我在这篇就如实回答她。正文第一阶段看书籍从书籍当中我们能更加系统的学习。我先推荐Java语言的书籍,如果你不是学Java的可以先跳过Java的书。如果你是什么都不会的小白,先看《Java 核心技术卷 1+卷 2》Java深入理解Java虚拟机(第3版)(必看)这本书主要讲的就是JVM,如果

2020-10-27 11:57:46 986 1

原创 从腾讯到阿里,最后选择字节

前言怕什么真理无穷,进一寸有进一寸的欢喜这篇文章是记录小炫的整个校招。你们可以从我的经历了解校招的过程,以及避开弯路。写这篇文章的时候我已经放弃校招了,我最终还是没有实现我的目标。自我介绍一下,我是华南农业大学(双非本科)软件工程专业的学生。我一共就拿了下面几个offer,主要是懒所以投递的公司很少。正文第一次面试我的第一次献给了CVTE,当时学校一直有在发他们的招聘消息,抱着试一试的心态参加了笔试。结果当然是不尽人意,选择题啥的都是瞎蒙的,编程题也是蒙蔽,反正写个最脑残的思路叫就对了

2020-10-21 17:23:12 1134

原创 Redis故障转移

1.选出新的主服务器 有优先级的,如偏移量领头哨兵对选择的主节点发送成为主节点的命令,当这个主节点返回的心跳信息包含自己是主节点的信息,证明选举成功2.修改从服务器的复制目标领头哨兵向其他从服务器发送命令3.将旧的主服务器变为从服务器作者采用IT猿同步助手一键多平台发布,查看原文...

2020-09-12 20:50:54 446

原创 B+树劣势

- **更少的IO次数:**B+树的非叶节点只包含键,而不包含真实数据,因此每个节点存储的记录个数比B数多很多(即阶m更大),因此B+树的高度更低,访问时所需要的IO次数更少。此外,由于每个节点存储的记录数更多,所以对访问局部性原理的利用更好,缓存命中率更高。- **更适于范围查询:**在B树中进行范围查询时,首先找到要查找的下限,然后对B树进行中序遍历,直到找到查找的上限;而B+树的范围查询,只需要对链表进行遍历即可。- **更稳定的查询效率:**B树的查询时间复杂度在1到树高之间(分别对应记录在根节

2020-07-04 17:50:24 2758

原创 双亲委派模型破坏

双亲委派当一个类加载器去加载类时先尝试让父类加载器去加载,如果父类加载器加载不了再尝试自身加载。这也是我们在自定义ClassLoader时java官方建议遵守的约定。双亲委派模型能保证基础类仅加载一次,不会让jvm中存在重名的类。比如String.class,每次加载都委托给父加载器,最终都是BootstrapClassLoader,都保证java核心类都是BootstrapClassLoader加载的,保证了java的安全与稳定性。自己实现ClassLoader时只需要继承ClassLoade

2020-07-04 17:47:31 777

原创 select * 的好处和坏处

很多资料只说了这种写法的坏处1.取出全部的列会让优化器无法完成索引覆盖扫描这类油画2.会带来额外的I/O 内存 CPU的消耗好处能提高相同代码的复用性。很简单理解,有 a b c三类 ,如果我select * 那么,我需要用到a b 的地方和需要用到 a c 的地方就可以用相同的代码。所以不要只看到他的坏处...

2020-06-16 11:32:56 2181 1

原创 spring 循环依赖

1.从哪知道spring能支持循环依赖spring默认支持的,有个属性allowCircularReferences,并且提供api供我们修改,但是如果要生效需要在srping初始化之前就更改好。例子两个类 A B 循环依赖2.循环依赖的过程1.初始化扫描出来的类后,会调用getBean()方法去实例化扫描出来的类。之后调用doGetBean()2.第一次调用getSingleton() 去一级缓存拿,拿不到3.第二次调用getSingleton() 在set集合中记录A正在.

2020-06-07 10:48:57 605

原创 Redis客户端 从发送命令到回复的过程

1.发送命令当我们在客户端输入命令时,客户端会将命令转换协议格式2.读取命令服务器收到后,将命令请求保存到客户端状态的输入缓冲区,客户端状态是保存状态信息的,比如客户端连接时间、是否授权、输入缓存区等等。完成输入后,对输入缓存区进行分析,保存到客户端状态的argv、argc属性当中,其实就是把输入缓存区进行词法分析。3.查找命令客户端状态argv是数组,argv[0]保存的是redis的命令,如set。服务器根据set去命令表当中找到set所指向的函数。命令表的结构就是key 是命令

2020-06-01 20:02:38 1411

原创 负载均衡

一、负载均衡负载均衡分两个,一个是前端,一个是数据中心内部。前端一般希望做到最小化用户请求延迟,通常就是用CDN。尽量选择最近的节点,选择最优的机房。数据中心:先看下这张图,左边的图最忙和最不忙的CUP相差还是挺大的,这样就是不好的负载均衡,右边的就是比较好的负载均衡。一般的负载均衡策略如下:轮询、随机、加权、hash但是这样会有问题第一个问题,对于每一个qps,实际上就是每一个query、查询、API请求,它们的成本是不同的。节点与节点之间差异非常大,即便你做了..

2020-05-20 15:24:20 755

原创 如何实现下载大文件,解决网络中断等问题

下载东西很容易,但是如何优化?先抛出几个问题1.下载完后,文件都要存在内存吗? 比如我下载两个g的文件需要两个g的内存?2.下载文件后,如何存进硬盘,需要拷贝几次? 能不能实现零拷贝?3.下载的过程中多线程下载会提高速度吗?4.下载的过程中如果网络中断了怎么办?分别回答这几个问题1.没必要存在内存,我们可以用流来下载,但是用流来下载的痛点是:网络断开了怎么办? ...

2020-04-23 20:30:25 8917

原创 docker入门

为什么会有docker?软件可以带环境安装.也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。简单的说就是我们把代码,环境,配置,依赖包等等打包。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作如何工作?Docker是一个Client-Server结构的系统,D...

2020-04-20 09:37:22 2385 2

原创 Redis的SDS和c语言字符串的区别

SDS是Redis中的动态字符串。和c语言字符串不同之处在于,多了两个属性,len和free。 buf用来记录数据,当然和c语言一样一\0结尾。不过,这个\0对于用户来说是通明的,我们不需要加上去,它自动帮我们加。那这样有什么好处?1.获取字符串长度从O(n)降低为O(1)。这对了追求速度的Redis来说,是很有用的。2.不会溢出,c语言中 aa\0bb\0 这是两个字...

2020-04-12 20:48:38 1258

原创 动态库与静态库区别

首先,两者最重要的区别在于该库是否被编译进目标程序当中。静态库:该库在编译的时候会直接整合到目标程序当中,也就是说,每个程序的静态库都是独立的。这样使得文件比较大。而且因为是编译的的时候整合进去的,所以如果程序更新需要重新编译。动态库:该库在编译的时候是有个指针指向动态库的位置。所以只要指针不变,动态库是可以随时变换的。适用:动态库适用于算法和功能,就是需要经常更...

2020-04-10 14:30:26 722 1

原创 docker是什么

docker是什么通过对应用封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)全生命周期管理,达到“一次封装,到处运行”为什么使用 ,使用它可以无需关心环境,只需要配置就可以构建镜像,并且部署。如果不使用,那就需要为不同的环境进行安装。简单的来说,就是把东西都装进集装箱当中,我们不需要管里面是什么。那...

2020-04-09 20:57:52 517

原创 Zookeeper ZAB协议中的zxid

zxid是事务编号,是64位的。可以把他拆分为两部分,分别都为32位。低32位是事务id,是递增的。高32位是leader周期epoch。 这里可能有点难理解,你可以把他理解为年代,每个leader都有一个年代。在leader所属的年代,该leader拥有最高权力。如果该leader挂了,那么就会换下一个leader,此时年代也应该+1.会有这种情况,如果上一个年代的leader复活了...

2020-04-08 11:50:29 3355

原创 java 中String拼接后为什么输出到一半就结束了

static void concat(){ token[p_token]=ch; ++p_token; token[p_token]='\0'; }这是我用来拼接字符串的方法。可以看出这是看着c语言写的。java中并不需要最后加上\0而正是因为加上\0。字符数组转成字符串的时候,字符串最后会有\0的结束符。!!!这就导致 拼接字...

2019-11-20 11:05:25 1254

原创 读写锁中 为什么读锁不能升级为写锁

读锁升级为写锁。首先自己有读锁,之后拿到写锁。如果有两个读锁同时升级为写锁。那么只有一个能升级成功。但是这两个线程同时拥有读锁。其中一个线程还一直在申请写锁。这就会造成死锁。但是锁降级是可以的。因为写锁只有一个线程占有。锁降级:锁降级指的是写锁降级成为读锁。如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种分段完成的过程不能称之为锁降级。锁降级是指把持住(当前拥有的)写锁,再...

2019-11-06 08:31:29 3454

原创 为什么公平锁的性能低于非公平锁

我们必须先知道,在恢复一个被挂起的线程与该线程真正开始运行之间存在着严重的延迟。

2019-11-05 17:31:19 2073

原创 java中间变量缓存机制

public class Test{ public static void main(String args[]){ int j = 0; for(int i = 0 ;i < 100;i++){ j = j++; } System.out.println(j); }}输出为0...

2019-10-24 21:36:21 372

原创 n个骰子的点数 java

题目:滑动窗口的最大值把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。解题思路:1.解法一可以使用递归来求解。详细代码见书。2.解法二的思路为:在一轮循环当中,第一个数组总的第n个数字表示骰子和为n出现的次数。在下一轮循环中,我们加上一个新的骰子,此时和为n的骰子出现的次数应该等于上一轮循环中点数和为n-1,n-2,n-3,n-4,n-5...

2019-10-09 20:51:15 739

转载 java重写与重载

方法重写的原则:重写方法的方法名称、参数列表必须与原方法的相同,返回类型可以相同也可以是原类型的子类型(从Java SE5开始支持)。 重写方法不能比原方法访问性差(即访问权限不允许缩小)。 重写方法不能比原方法抛出更多的异常。 被重写的方法不能是final类型,因为final修饰的方法是无法重写的。 被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行...

2019-10-07 10:27:46 305

原创 为什么异或后可以找出数组中只出现一次而其他数字出现两次

1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?将所有的数全部异或,得到的结果与1^2^3^...^1000的结果进行异或,得到的结果就是重复数。但是这个算法虽然很简单,但证明起来并不是一件容易的事情。这与异或运算的几个特性有关系。首先是异或运算满足交换律...

2019-09-30 15:52:08 836

原创 java归并排序

public static void merge(int []a,int low,int mid,int high){ int[] temp=new int[high-low+1]; int t=0,k1=low,k2=mid+1; while(k1<=mid&&k2<=high){ if(a[...

2019-09-26 17:01:31 258

原创 为什么final修饰符是初始化安全的?

看了java并发编程实战,有很多困惑。书中没有讲明白final域能确保初始化过程的安全的。首先我们来看下创建对象的时候。User user=new User();看过JVM都知道,这其中包含了几步步。1.检测类是否被加载,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载...

2019-09-25 15:30:24 717

原创 java快速排序

static void quickSort(int [] s,int start,int end){ if(start>end){ return; } int mid=(start+end)/2; int low=start; int high=end; int stan...

2019-09-22 17:18:44 131

原创 Java用位图的思路实现组合

假设一共有n个字符,则可能的组合结果共有2^n-1种。 以输入3个字符a、b、c为例: 3个字符,可以用3个位来表示,从右到左的每一位分别用来代表a、b、c,该位为1表示取该元素,该位为0表示不取该元素。例如如组合a表示为001,组合b表示为010,组合ac表示为101,组合abc表示为111,而000是没有意义的,所以总共的结果就是2^n-1种。因此,我们可以从值1开始循环到2^n-1,输出...

2019-09-22 15:32:55 906

原创 深入理解静态内部类实现单例模式

public class SingletonDemo3 { private static class SingletonClassInstance{ private static final SingletonDemo3 instance=new SingletonDemo3(); } private SingletonDemo3...

2019-08-31 17:14:04 1721

原创 悲催!!!把null字符串看成null

铭记 太惨了在编译器真的很难看出来

2019-08-22 17:38:35 1778

原创 java8(三)默认方法 冲突的解决

我们知道java只允许单继承类,但可以多继承接口。默认方法的实现,为API更新换代带来方便的,也留下了不少麻烦。每个接口都可以实现默认接口,而且是同样的签名。这个类去实现他们这些接口。那该如何继承有三条规则1.类和父类的优先级最高,高于任何的默认方法如果你继承了一个接口和类,且有一个方法有相同的签名,那就要听从父类的。不管父类的方法是不是抽象的,如果父类的方法是抽象的那你就必须...

2019-08-16 11:08:25 1790

原创 对于面向过程和面向对象的理解

程序员吧数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体。程序代码则用于处理这些数据。这种思维方式直接站在计算机的角度去抽象问题和解决问题。是面向过程站在现实世界的角度去抽象和解决问题,把数据和行为看做是对象的一部分。是面向对象...

2019-08-12 15:41:21 1916

原创 java虚拟机(十)synchronized是如何实现可见性和有序性的,和volatile的区别

大家都知道 synchronized 是锁。那怎么会实现可见性和有序性。volatile也能实现对吧。java内存模型是这么规定的关于主内存与工作内存之间的交互协议,即一个变量如何从主内存拷贝到工作内存。如何从工作内存同步到主内存中的实现细节。java内存模型定义了8种操作来完成。这8种操作每一种都是原子操作。8种操作如下:lock(锁定):作用于主内存,它把一个变量标记为一条线程独占...

2019-08-12 11:22:14 3538 5

原创 java虚拟机(九)编译是如何优化代码的

首先我们要明白优化代码,并不是建立在java的源码之上的。而是建立在代码的中间表达是或者机器码上面。公共子表达式消除如果一个表达式E已经出现过了。而且下面出现的E的所有变量值都没有发生改变,那就可以优化。如 a=b*c+r+c*b这里b*c和c*b是一样的。所以可以变成 a=e+r+e数组边界检查消除我们知道java是一门动态安全的语言。访问数组的时候,会进行上下界限的检...

2019-08-09 20:19:36 5913

原创 java虚拟机(八)语法糖

语法糖可以看成是编译器实现的一些功能。他们帮我们程序员特高代码开发效率。如泛型:泛型擦除前public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("hello", "你好"); map.put("ho...

2019-08-09 10:05:19 1590

原创 spring使用了环绕通知后,全局异常捕获失效 解决办法

项目出现这个问题。本来全局异常捕获好好的。只要抛出自己写的自定义异常就会传给前端。但我加入了环绕通知后,发现全局异常失效了。来看看我的全局异常package com.yiban.suoai.exception;import com.yiban.suoai.exception.SAException;import org.aspectj.lang.annotation.Aspect...

2019-08-07 11:12:14 5289 8

原创 java并发(三)CopyOnWriteArrayList源码分析

先看前面一部分 private static final long serialVersionUID = 8673264195747942595L;//用于序列化 /** The lock protecting all mutators */ final transient ReentrantLock lock = new ReentrantLock();//锁 ...

2019-08-06 20:46:39 1573

原创 equals() 如果避免空指针异常

(o1 == null) ? o2 == null : o1.equals(o2);看源码的时候看到的。觉得有用,记录下

2019-08-06 20:02:56 2204

原创 Jenkins上传项目已经删除文件,但是Jenkins中没有删除

最近,本人在项目中删除一个文件,因为不删除就跑不起来。删除后上传到Jenkins后,还是跑不起来。去码云上看,发现确实已经把该文件删除掉了。接下来,我直接把项目打包成war,手动上传到服务器。发现,又可以跑起来了。于是我想是不是Jenkis有缓存?我就去看看Jenkins中有没有删除缓存的选项,结果看到对,清理工作空间。清理后会重新构建,这次构建就完全是你自己上传的,没有缓存。...

2019-08-06 11:26:36 3450 1

简单的SpringMVC小项目(适合刚刚学的)

实现注册和登录的springmvc小项目。

2019-02-27

空空如也

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

TA关注的人

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