漫话编程

其他

终于有人说清楚了!"内卷"和"努力"有啥区别?

在各项竞争日益激烈的社会环境中,我们都挥舞着“人为刀俎,我为鱼肉”的白旗祈求“停战”,殊不知,“硝烟”中的你我既是“鱼肉”也是“刀俎”……不然就只能任人宰割了,不是么?
2021年6月23日
其他

漫话:如何给女朋友解释为什么Java里面的String对象是不可变的?

String的不变性String在Java中特别常用,相信很多人都看过他的源码,在JDK中,关于String的类声明是这样的:public
2021年3月22日
其他

漫话:如何给女朋友解释为什么Java不支持多继承?

要提到多继承,首先要从继承开始说起。继承面向对象的编程语言有三个重要的基本特性:封装、继承和多态。而很多人认为继承是Java面向对象编程技术的一块基石。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。加入,我们已经定义了一个Car类,这个Car中包含了轮胎、发动机、底盘、方向盘等属性,还具有行走、加油、开窗等行为。而如果我们想要定义一辆Bus,想要复用这些属性和行为,就可以通过继承来实现。通过使用继承,我们使得Bus类和Car类之间存在了一定的关系,而我们通常称呼Car是Bus的父类,Bus是Car的子类。在Java中,使用extends关键字来实现继承。如上面Car与Bus,当写继承语句时,class
2021年3月1日
其他

漫话:如何给女朋友解释什么是缓存穿透、缓存击穿、缓存雪崩?

周末在家面试,和候选人聊到Redis的问题,于是问了他一个问题:你知道缓存穿透、缓存击穿和缓存雪崩吗?他们之间的区别是什么?分别怎么解决吗?面试结束后,女朋友好像有很多问号,于是来问我。缓存穿透要把这个问题讲清楚,先举个例子。一个女孩子去门店买口红,到了门店之后被告知她想要的那个色号已经没有了。于是她要求店员去问总部还有没有货。总部发现这个色号也没有了,于是女孩子就离开了。过了一会另一个女孩子又来了,也想要购买同一个色号,店员就又总部问了一次。如此反复。女孩子买口红不仅需要门店帮忙查询,还需要总部也进行盘货。类似这种情况,在缓存领域有一个类似的概念叫做缓存穿透。缓存穿透是指缓存服务器中没有缓存数据,数据库中也没有符合条件的数据,导致业务系统每次都绕过缓存服务器查询下游的数据库,缓存服务器完全失去了其应用的作用。缓存空值解决多次询问总部的方法比较简单,如果口红门店在帮第一个女孩子查询之后,就记录下来这个色号已经没有了,下次其他女孩再来问这个色号的时候,直接告诉她没货了。这样就可以避免每次都惊动总部了。在缓存中,之所以会发生穿透,就是因为缓存没有对那些不存在的值得Key缓存下来,从而导致每次查询都要请求到数据库。那么我们就可以为这些key对应的值设置为null并放到缓存中,这样再出现查询这个key
2020年12月28日
其他

漫话:如何给女朋友解释什么是Mock?

某天晚上,接到测试的电话,他问为什么在日常环境我的接口使用不同的用户测试返回的内容都一样,我回答他:接口数据被我mock掉了,现在返回的都是mock数据。需要调一下mock的逻辑才行。挂断电话之后,女朋友满怀好奇的来问我:Mock,直译过来的话是虚假的意思,但是在面向对象程序设计中,一般翻译成模拟。如接口mock、mock对象等,通常表示接口模拟、模拟对象等。在程序开发中,一般在两种场景中会是用到mock技术,第一种是在单元测试的时候,第二种是在接口测试的时候。单元测试mock最初,mock主要应用在单元测试中,因为单元测试的目的是只想针对自己关注的这个"单元"部分进行测试,所以需要对屏蔽掉一些外部依赖的影响,这时候就可以使用mock技术。不仅仅是软件开发领域的单元测试,其实在很多工业测试场景中,也会使用一些Mock技术,比如常见的汽车碰撞测试。汽车在上市之前都需要经过碰撞测试,并且公布测试结果。碰撞测试过程中需要通过真实撞击来评定汽车的耐撞能力以及对内部驾驶人员的保护能力。但是,为了保证验证的准确性,有为了保证测试人员的安全,一般会采用假人来进行测试。这些假人都是经过特制的,他们的生物学性能一般和真人是一样的,比如体重、关节能力、组织强度等。而且有时候,为了保证测试的全面性,还会采用各种各样的假人,如成年人、老人、小孩子、男性、女性等都需要充分测试到。所以,这个假人其实就是一个Mock对象。在软件单元测试中,我们也需要用到这些测试对象。目的也类似,就是为了保证测试的全面性及准确性。之所以要在测试中使用Mock对象,其实有很多原因,其中最重要的原因就是真实对象的构造成本太高。这时候一般就会采用mock对象。而市面上也有很多工具可以方便的帮助我们进行单元测试的mock,如Easymock、jMock、Mockito、Unitils
2020年12月21日
其他

漫话:如何给女朋友解释什么是语法糖?

Blocks),其实本质上都是语法糖。关于Java中的语法糖,Hollis大神写过很多文章深入的介绍过他们的原理,如《不了解这12个语法糖,别说你会Java》、《我反编译了Java
2020年11月30日
其他

漫话:为什么Java中的main方法必须是public static void的?

在Java中,想必所有人都不会对main方法感到陌生,main方法是Java应用程序的入口方法。程序运行时,要执行的第一个方法就是main方法。在使用Java写下第一个hello
2020年11月9日
其他

漫话:如何给女朋友解释什么是删库跑路?

?漫话:为什么计算机用补码存储数据?漫话:应用程序被拖慢?罪魁祸首竟然是Log4j!漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?喜欢我可以给我设为星标哦好文章,我“在看”
2020年10月19日
其他

漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3 ?

为什么当我们使用电脑浏览器计算0.2+0.1的时候,解决却是0.30000000000000004,而0.1+0.6的结果却是0.7呢?这个问题其实一直是一个经典的问题,甚至有一个网站的域名就是https://0.30000000000000004.com/
2020年10月12日
其他

漫话:为什么计算机用补码存储数据?

我们知道,计算机只认识0和1[为什么计算机只认识0和1],现实世界中的内容,无论是文字、音频、视频等等想要通过计算机存储、计算或者展示,都需要转换二进制。就像你刚刚唱的旋律,想要存储在计算机中也是要转成二进制的。那么,最简单的一个数字,想要在计算机中表示出来,就需要通过一定的手段将他转换成二进制。而这种手段我们称之为编码方式。原码相信很多人在上初中的时候都学过很多方式把一个十进制数转成二进制数,比如我们可以很快速的知道10的二进制可以表示成
2020年8月31日
其他

漫话:应用程序被拖慢?罪魁祸首竟然是Log4j!

之前一段时间,为我们发现的一个SaaS应用程序会间歇性地卡顿、变慢,因为很长时间都没有定位到原因,所以解决的办法就只能是重启。这个现象和之前我们遇到的程序变得卡顿不太一样,因为我们发现这个应用程序不仅在高流量期间时会变慢,有时在低流量时期也会变慢。所以这令大家都很奇怪。这类应用程序的变慢,重新启动之后就可以维持一段时间,但是过段时间又有可能会再次出现。故障排除当我们准备排查这个问题的时候,我们在应用程序速度很慢的时候,尝试着捕获了这个应用程序的线程Dump。有很多种方式来捕获线程转Dump,我们选择了“jstack”工具来获取。在问题发生时获得线程Dump是非常关键的!然后我们将捕获的线程Dump上传到一个线上线程Dump分析工具(https://fastthread.io/)。该工具立即帮我们生成了一份报告。报告立即找出了问题的根本原因。分析工具上显示“http-nio-8080-exec-121”线程阻塞了100多个线程。下面是传递依赖图,展示了阻塞线程:从图中可以看到100多个线程被“http-nio-8080-exec-121”线程阻塞。当我们点击图中的“http-nio-8080-exec-121”超链接时,它会打印出线程的堆栈轨迹:仔细观察图中被框出来的部分,你可以看到该线程已经获取到org.apache.log4j.Logger的锁,正在进行其他的操作。接下来,我们随便找一个被"http-nio-8080-exec-121"阻塞的线程,看一下他的堆栈信息:看一下上面堆栈跟踪中被框出来的部分。我们可以看到“http-nio-8080-exec-56”当前正处于阻塞(BLOCKED)状态,而阻塞的原因是它正在等待获取org.apache.log4j.Logger的锁。前面我们刚刚分析过,“http-nio-8080-exec-121”获得了org.apache.log4j.Logger的锁,正在进行其他操作,而锁并没有被释放,所以其他线程想要获得锁就只能被阻塞。其余的所有被阻塞的线程也在等待获取org.apache.log4j.Logger的锁。因此,每当任何应用程序线程试图记录日志时,它都会因为无法获取到锁而进入阻塞状态。刚开始我们也没有太多的头绪,后来我们尝试借助Google的力量,然后我们用谷歌搜索了"org.apache.log4j.Logger
2020年8月17日
其他

漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?

当我们想要写一个循环体,期望执行10次的时候,我们会使用以下方式:for
2020年7月13日
其他

漫话:为什么程序员喜欢使用0 ≤ i < 10这种左闭右开的形式写for循环?

当我们想要写一个循环体,期望执行10次的时候,我们会使用以下方式:for
2020年6月29日
自由知乎 自由微博
其他

摆摊吧,程序员!

谁都没想到,在2020年"摆摊"成功接棒"口罩"、"头盔",成了又一个热门话题一觉醒来,整个朋友圈都在讨论摆摊的事情以至于还没明白什么是"网红经济"的我要开始思考"地摊经济"了那么,作为一个程序员,如果让我们出去摆摊可以做什么呢?1卖格子衬衫、双肩包2卖锅3卖书4代改Bug5卖假发6卖轮子7修电脑8卖秤9才艺表演10搬砖11卖刀具12卖"对象"13接私活那些口口声声"996加班太累"的人应该看着你们,像我一样我看着你们,满怀羡慕程序员积攒了好几年的财富所有的格子衫,假发套,技术书籍和旧电脑像是专门为摆摊准备的礼物职业搬砖,擅长背锅,会砍需求多年的职场磨练出的钢铁意志终于要派上用场自由选择一块空地支上一个小桌,打开一盏台灯开始摆上自己的小摊儿很多人在晚上6点,才推车来准备摊位不再需要早上6点起床
2020年6月8日
其他

为什么不要问程序员借钱

漫小话碎碎念:新弄了个小专栏,以两三格漫画的形式给大家呈现一些只有程序猿才能看懂的梗,刚开始着手弄这个part,一切都还不太成熟,也欢迎大家在留言区提出一些建议,可以是一些梗,可以是形象整改,表达形式,都好,目前定在每周五发,毕竟工作了一周了,权当放松看看,博君一笑~
2020年6月5日
其他

漫话:为什么键盘以QWER排列,而不是ABCD?

QWERTY的来源第一台实用即真正的打字机的发明人是一位美国人,他叫克里斯托夫·肖尔斯。最初的打字机键盘是按照字母顺序"abcd"这样排列的,键盘的大概布局如下:刚开始打字员对于打印机不是很熟练,所以用起来还没有太大的问题。但是,随着打字员熟练程度的提升,敲击键盘的速度也越来越快,问题就暴露出来了。因为最初的打印机工作方式如下:字母被敲击时,弹簧把这个字母对应的一根金属字杆弹到纸上,这样就印上了一个字。松开时,要靠弹簧把字杆弹回原位。据统计,DHIATENSOR这十个字母占了英语中70%的内容,所以,这些字母非常高频,在原来的键盘中,这些字母几乎都集中在了一起。随着打字员的速度越来越快,打字机的金属杆之间经常会卡在一起。而克里斯托弗·肖尔斯为了解决这个问题,他想了一个办法来避免键盘之间的卡顿,于是他把出现频率比较高的单词分散到键盘的不同位置上去,让他们尽可能离得远,从而最大限度地减少碰撞的机会。于是,就出现了QWERTY键盘,“QWERTY”是该键盘布局字母区第一行的前六个字母。所以,QWERTY键盘的出现,目的并不是提升打字速度,也不是符合人体工程学,这种设计在当时只是会降低打字速度,但是可以有效的避免卡键。为什么QWER延续至今QWERTY键盘最初的设计只是想通过曲线救国的方式解决键盘按键卡顿的问题,那么随着技术的发展,按键卡顿的问题就已经不存在了。那为什么时至今日,还是在使用这种键盘呢?其实,在市面上,确实不只有QWERTY键盘这一种,而且QWERTY键盘也不是打字最快的键盘。甚至有很多人公开说过“QWERTY键盘布局是史上最反人类的设计”。总结下来,这个键盘布局有以下几大缺点:该键盘天生就是为了减速而设计的键盘,效率低下将常用的字母和符号边缘化,并分配给力量较弱的小拇指和无名指中间的黄金区域全都是那些不常用的字母手指不停地在三排键盘中上下移动,效率进一步降低除了QWERTY键盘外,确实还有很多优秀的键盘布局方式,Dvorak便是其中之一。1936年美国人August
2020年6月1日
其他

漫话:为什么计算机起始时间是1970年1月1日?

问题复现1970-01-01对于开发者来说都是不陌生的,有些系统对于时间的处理如果不够好的话,就可能把时间显示成1970-01-01,所以经常有用户看到1970-01-01这个时间。这种情况其实是很简单就可以复现的,当我们尝试使用以下Java代码定义时间:Date
2020年5月11日
其他

漫话:为什么生僻字计算机上打不出来,或者打出来也无法显示呢?

电脑如何显示字符我们在《漫话:如何给女朋友解释为什么计算机只认识0和1?》中介绍过,在计算机世界中,只有0和1两个字符,所有的数据都需要通过二进制表示,如52个英文字母(大写+小写)、阿拉伯数字以及常用的符号等在计算机都需要通过二进制来表示。所以,我们在电脑上看到的所有字符,都需要通过一种方式将他们装换成二进制表示。那么转换的这个过程就需要通过字符编码做映射,我们在《漫话:如何给女朋友解释什么是"锟斤拷"?》中介绍过,为了将字符转换成二进制,有很多字符编码的标准被制定出来,其中包括Unicode、GBK等。那么,有了字符编码之后,计算机就可以认识我们想输入的字符了,但是想要把他展示出来还是比较复杂的,大致流程如下:当我们在键盘上输入一个字符之后,计算机会通过Unicode,将这个字符转换成二进制。接下来,通过获得到的Unicode编码值,查询字体文件中的Charmap,把编码值转换成字形索引。一旦你获得了字形索引,你便可以装载对应的字形图像。之后,就可以对这个字形图像进行图形渲染,然后就可以显示在显示器上面了。大家或许对字形索引、图形渲染这些不是很了解,没关系,大家只需要知道,一个字符想要在电脑上显示出来,需要以下三个条件:1、输入法支持输入这个字符2、Unicode编码支持将这个字符转成二进制3、计算机上安装的字体中包含这个字符输入法支持字符集由于汉字数以万计,电脑键盘不可能为每一个汉字而造一个按键。因此,人们需要替汉字编一套输入码(检索出汉字的代码),用数个键来输入一个汉字。而把多个按键输入转换成汉字的工具就是中文输入法。而目前市面上比较常见的中文输入法,大多数都是采用的GBK的作为字符集的。GBK共收录21886个汉字和图形符号,其中汉字(包括部首和构件)21003个,图形符号883个。但是中文汉字远不止2万多,所以,很多生僻字是无法通过输入法打出来的,如"Biángbiáng面"中的biáng字。另外,还有些输入法使用了比较全的字符集(Unicode等),如郑码、仓颉等输入法是可以输入一些生僻字的。Unicode字符能够在电脑上显示,还有一个前提就是他可以被翻译成二进制,也就是说,如果一个字符没有被Unicode收录的话,是无论如何都无法显示的。所以,目前很多汉字的生僻字,还有一些emoji都是无法打出来的。但是Unicode还是在不断更新的,最近一次更新是2020年3月10日,刚刚发布了Unicode
2020年4月20日
其他

漫话:为什么你下载小电影的时候进度总是卡在99%就不动了?

Adamiecki发明了一种叫做harmonogram(波兰语,时间表)的图表;同一时间,亨利·甘特(Henry
2020年4月13日
其他

分布式锁之Zookeeper

前言锁我想不需要我过多的去说,大家都知道是怎么一回事了吧?在多线程环境下,由于上下文的切换,数据可能出现不一致的情况或者数据被污染,我们需要保证数据安全,所以想到了加锁。所谓的加锁机制呢,就是当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问,直到该线程读取完,其他线程才可使用。还记得我之前说过Redis在分布式的情况下,需要对存在并发竞争的数据进行加锁,老公们十分费解,Redis是单线程的嘛?为啥还要加锁呢?看来老公们还是年轻啊,你说的不需要加锁的情况是这样的:单个服务去访问Redis的时候,确实因为Redis本身单线程的原因是不用考虑线程安全的,但是,现在有哪个公司还是单机的呀?肯定都是分布式集群了嘛。老公们你看下这样的场景是不是就有问题了:你们经常不是说秒杀嘛,拿到库存判断,那老婆告诉你分布式情况就是会出问题的。我们为了减少DB的压力,把库存预热到了KV,现在KV的库存是1。服务A去Redis查询到库存发现是1,那说明我能抢到这个商品对不对,那我就准备减一了,但是还没减。同时服务B也去拿发现也是1,那我也抢到了呀,那我也减。C同理。等所有的服务都判断完了,你发现诶,怎么变成-2了,超卖了呀,这下完了。老公们是不是发现问题了,这就需要分布式锁的介入了,我会分三个章节去分别介绍分布式锁的三种实现方式(Zookeeper,Redis,MySQL),说出他们的优缺点,以及一般大厂的实践场景。正文一个骚里骚气的面试官啥也没拿的就走了进来,你一看,这不是你老婆嘛,你正准备叫他的时候,发现他一脸严肃,死鬼还装严肃,肯定会给我放水的吧。咳咳,我们啥也不说了,开始今天的面试吧。正常线程进程同步的机制有哪些?互斥:互斥的机制,保证同一时间只有一个线程可以操作共享资源
2020年4月11日
其他

项目实践:SpringBoot三招组合拳,手把手教你打出优雅的后端接口

}这样做当然是没有什么错的,而且格式排版整齐也一目了然,不过这样太繁琐了,这还没有进行业务操作呢光是一个参数校验就已经这么多行代码,实在不够优雅。我们来改进一下,使用Spring
2020年4月10日
其他

面试问我,创建多少个线程合适?我该怎么说

时间片。按照理想情况来看,四个线程执行的时间总和与一个线程5独自完成是相等的,实际上我们还忽略了四个线程上下文切换的开销所以,单核CPU处理CPU密集型程序,这种情况并不太适合使用多线程此时如果在
2020年4月9日
其他

if-else嵌套太深?教你一个新手都能掌握的设计模式搞定!

}}一开始,我就直接使用异常来做逻辑。但后续逻辑越来越复杂之后,也会出现一些问题。例如异常只能返回异常信息,不能返回更多的字段信息。后面也留意到,异常做逻辑,在阿里规范是禁止的。阿里代码规范
2020年4月8日
其他

你也需要懂的一点前端小知识—Vue快速入门

提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。.stop.prevent.capture.self.once.passive......“另外事件处理还可以支持
2020年4月7日
其他

别羡慕别人100万年薪,想想工作之外的8个小时,你都学了啥?

有句话说的好:“不想当将军的士兵,不是好士兵。"身在职场,也是这样。作为技术人,无论是管理路线,还是技术路线,技术都是敲门砖。不过,选择技术路线发展的程序员同学,不少走到高级工程师这个级别,就无法再进入到架构师的行列:面对技术繁杂,越发感觉到无力,根本无法接触架构师的核心技能长期埋没于软件,看不清从业务到软件架构的价值链对自己定位不清晰,处理不好技术、业务的关系。......从初级开发工程师到架构师,到底需要需要做多少努力才能跨越这个鸿沟?按照不同类型的分类,架构师其实可以分为很多种,比如:按照不同软件层,架构师可以分为:网络架构、系统架构、数据架构、应用架构、平台架构等;按照行业可以分为:电商架构、搜索架构、安全架构、金融架构、游戏架构等;按照工作的深度分为:业务架构、模块架构、框架架构、中间件架构、服务器架构等。因此想要成为一名架构师,首先需要对架构师有一个整体的认识,充分了解自身的兴趣点,找到适合自己的发展方向。除此之外,除了要有过硬的技术,更要善于沟通,对业务有深入的理解,与此同时还需要拥有优秀的架构设计能力。总之,成为一名架构师绝不仅仅是因为工作年限够长,这需要拥有丰富的经验以及接触大量的工作以外的知识,以扩宽自己的视野。在优秀的架构师眼里,每一行代码都体现出优秀的架构能力。但很多程序员还没有到这个层次,就卡在了知识结构的欠缺上。今天,我为大家推荐一门课程,由前58集团技术委员会主席、转转电商首席架构师孙玄(江湖人称玄姐),联合架构师之路作者沈剑共同打造了《架构师训练营》这门课程。本课程共有8大篇章,22个章节,225个小结。系统科学的将知识点串联起来,以提升架构设计能力为目标,对理论进行深入讲解,并结合丰富的实战案例,解决想要成为架构师却无从下手的技术同学的困扰。以下为2020年最新一套《架构师训练营》大纲
2020年4月7日
其他

一口气说出 6种 @Transactional 注解失效场景

引言昨天公众号粉丝咨询了一个问题,说自己之前面试被问@Transactional注解哪些场景下会失效,一时语塞致使面试失败。所以今天简单的和大家分享一下@Transactional相关的知识。@Transactional
2020年4月6日
其他

前端大神的离逝,让我们不得不有所反思。

要本土化,真的是全中文了!喜欢我可以给我设为星标哦好文章,我
2020年4月5日
其他

动态代理的实际应用

框架)加一个数据库操作包,也实现类似的功能。示例最终的使用效果如下:第一版本还比较粗糙,但功能都具备。第一步:需要实现一个初始化接口,该接口会在应用初始化的时候执行。紧接着我们需要定义一个
2020年4月3日
其他

程序员无休止加班的真正原因

来源:豆瓣网链接:www.douban.com/doulist/26838305/推荐阅读:面试了15位来自985/211高校的2020届研究生之后的思考太赞了,IDEA
2020年4月2日
其他

太赞了,IDEA 2020 要本土化,真的是全中文了!

来自:开源中国(作者:oschina)原文链接:https://www.oschina.net/news/112937/intellij-based-ide-features-roadmap-for-2020前不久
2020年4月1日
其他

面试了15位来自985/211高校的2020届研究生之后的思考

上周,我面试了15位2020年毕业的计算机相关专业的研究生,他们都是来自四川地区985、211高校,校名如雷贯耳。因为我有参与到设计校招题的工作中。所以我是技术一面的面试官之一。这篇文章我本来想面试完后就可以马上输出,但是面试结束后,我有了很多思考。这篇文章不好写,但是我是一个"独立的自由撰稿人",所以我还是想谈谈我的感受。仅仅代表我个人观点。关于校招普通二本VS一流高校我是一个本科生,我读的大学是一个普通二本,我报考的那一年,学校刚刚从专科院校升级为二本院校。所以我是学校的第一届本科生。可能因为是第一届本科生,在校招的时候,来我们学校招人的科技公司一只手都能数过来。而且,每一家公司我都没有听过。我没有去,所以我没有经历过校招。但是我经历过招聘会,类似于人才市场,当时的场景是这样的:你以为这是我在网上找的图?不是的,这是2014年11月16日,我去参加《2014年成都冬季特大型人才招聘会暨高校毕业生供需洽谈会》,我拍的。这个人才招聘会,展厅非常的大,里面有很多的岗位,龙蛇混杂,其中不乏计算机行业相关的工作。比如下面这个来自2014年的招聘:当年的我丝毫不觉得这个招聘有任何的问题,甚至还挺想去。但是我现在再读一次后发现:这TM不就是培训机构吗?!整的还挺委婉啊!你在网上海投简历,竞争可能更大,但是人才市场给你带来的视觉冲击,是直观且绝望的。我们这个专业,毕业后,大方向分为了五类人:第一类:积极备战,准备考研党。第二类:实力傍身,开始工作党。第三类:随缘佛系,寻找工作党。第四类:四处碰壁,报名培训党。第五类:告别行业,另谋生路党。除了少部分的第二类人,他们在毕业之前就已经找好了工作。大多数人,包括我,是毕业之后才去找的工作,那时候,我们身上的标签是这样的应届生、普通二本、0年工作经验、社会招聘每一个标签都很难找工作,当它们都指向同一个人的时候,就真的很难找工作。所以就有人四处碰壁,无奈之下报名了培训班,几个月后包装简历,进入职场。也有人就此告别了这个行业,另谋生路。而我问了我身边的研究生朋友。他们毕业之前的一年有两次找工作的机会,秋招和春招。其中最好的时机是秋招,很多的叫得上名的科技公司你不需要专门去找他们,他们会去学校开专场招聘会。然后经过一次网络或者现场筛选,如果过了,就能进入到接下来的面试环节。大多数时候面临的问题是:哎,这家公司怎么叫我去面试呢?我当时就是顺便一投!哎,这家公司的面试地点好远啊!不想去了!
2020年4月1日
其他

Java 14 开箱,它真香香香香

的新特性。社区版的下载地址如下所示:https://www.jetbrains.com/idea/nextversion/安装的时候可以把之前的版本卸载,也可以选择保留。完成后,我们来新建一个
2020年3月31日
其他

Nginx凭啥并发数可以达到3w!?

少模块更丰富参考文章:http://www.oschina.net/translate/nginx-vs-apachehttps://www.zhihu.com/question/19571087
2020年3月30日
其他

没用过这些IDEA插件?怪不得写代码头疼

小伙伴们,大家好。今天准备和大家一起分享一下实际工作中常用的几款能提升幸福感和工作效率的IDEA插件吧,也欢迎小伙伴们在评论区安利出你们用过的觉得非常不错的插件,大家一起交流进步。1、Background
2020年3月29日
其他

Spring Data Redis 最佳实践!

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2020年3月28日
其他

干货深挖!从写简历,到面试、谈薪酬的那些技巧和防坑指南

年互联网行业经验,自认达到高级工程师的水平,希望以后能成长为架构师。(有目标、规划)敏建开发的忠实粉丝,单元测试驱动开发的实践者,会主动重构代码,有代码洁癖。(有良好的编码习惯)爱看技术书籍,一年看
2020年3月28日
其他

秒杀系统如何防止超卖?

前言本文主要是通过实际代码讲解,帮助你一步步搭建一个简易的秒杀系统。从而快速的了解秒杀系统的主要难点,并且迅速上手实际项目。我对秒杀系统文章的规划:从零开始打造简易秒杀系统:乐观锁防止超卖从零开始打造简易秒杀系统:令牌桶限流从零开始打造简易秒杀系统:Redis
2020年3月27日
其他

使用Redis+AOP优化权限管理功能,这波操作贼爽!

之前有很多朋友提过,mall项目中的权限管理功能有性能问题,因为每次访问接口进行权限校验时都会从数据库中去查询用户信息。最近对这个问题进行了优化,通过Redis+AOP解决了该问题,下面来讲下我的优化思路。问题重现
2020年3月27日
其他

Java 14 发布了,再也不怕NullPointerException 了!?

(NPE)。由于NPE可以发生在程序的几乎任何地方,试图捕获并从它们中恢复通常是不切实际的。因此,开发人员通常依赖于JVM来确定NPE实际发生时的来源。例如,假设在这段代码中出现了一个NPE:a.i
2020年3月26日
其他

既然有 HTTP 请求,为什么还要用 RPC 调用?

https://www.zhihu.com/people/yeecode推荐阅读:漫话:如何给女朋友解释什么是撞库、脱库和洗库?面试问Redis锁,我脸都绿了......Java
2020年3月25日
其他

新版任你发,我用Java 8!

提供。各版本重大更新内容从Java第一个版本发布到现在,已经有24年了,24年中共发布了14个版本,那么,。让我们细数一下各个版本中增加的主要特性有哪些。JDK
2020年3月24日
其他

漫话:如何给女朋友解释什么是撞库、脱库和洗库?

最近,安全圈又有一个大新闻,微博名为@安全_云舒的微博用户在发文称:“很多人的手机号码泄露了,根据微博账号就能查到手机号……已经有人通过微博泄露查到我的手机号码,来加我微信了。”并且,据说微博CEO的手机号码也被泄露了!(微博CEO,微博名@来去之间,江湖人称"来总")这件事情闹得挺大,经常刷微博的女朋友也知道了,然后过来问我:微博CEO
2020年3月23日
其他

面试问Redis锁,我脸都绿了......

命令的可以加参数,可以体现出自己的知识面。如果有缘你也阅读过这篇文章,并且学到了这个套路,作为本文的笔者我要加一句提醒:请注意你的工作年限!首先回答官网表明即将废弃的命令,再引出
2020年3月22日
其他

Java 14 发布了,不使用"class"也能定义类了?还顺手要干掉Lombok!

),详尽的说明了并吐槽了Java语言,他和很多程序员一样抱怨“Java太啰嗦”或有太多的“繁文缛节”,他提到:开发人员想要创建纯数据载体类(plain
2020年3月21日
其他

HTTPS 的 7 次握手以及 9 倍时延

客户端向服务端发送请求,服务端发回响应;这里的分析建立在特定版本的协议实现以及常见场景上,随着网络技术的发展,我们能够减少需要的网络通信次数,本文会在对应章节中提到一些常见的优化方案。TCPHTTP
2020年3月19日
其他

接口默认方法是什么鬼 ​

中也加入了默认方法来解决接口扩展造成的问题。接口扩展方法提出来之后,虽然解决了默认实现的问题,却又带出了新的问题。接口实现了默认方法,实现接口的类还需要实现吗?如果不实现会怎么样?无论
2020年3月19日
其他

Java堆内存是线程共享的!面试官:你确定吗?

进行跟踪。总结为了保证对象的内存分配过程中的线程安全性,HotSpot虚拟机提供了一种叫做TLAB(Thread
2020年3月18日
其他

2020年3月全国程序员工资统计,平均工资13820元

原文链接:https://blog.csdn.net/juwikuang/article/details/104643366
2020年3月18日
其他

求你了,别再说Java对象都是在堆内存上分配空间的了!

y;}以上代码中,point对象并没有逃逸出alloc方法,并且point对象是可以拆解成标量的。那么,JIT就会不会直接创建Point对象,而是直接使用两个标量int
2020年3月17日
其他

漫话:如何给女朋友解释什么是熔断?

最近比较忙,白天上班,晚上还得面试,都没有时间关注新闻。某天晚上刚刚结束一个电话面试,正准备写面试评价,女朋友拿着手机走过来,满脸疑惑的问我:在《如何给女朋友解释为什么双十一无法修改收货地址》中我们介绍过关于QPS、RT、并发用户数以及最大线程数等知识。我们知道,如果一个软件系统的并发请求数目超过了系统的最佳线程数,那么就会导致激烈的资源竞争,随着资源的匮乏甚至枯竭,整个系统也就面临着灾难。所以,很多软件系统为了保证即使在出现并发用户数>最佳线程数时,也不至于导致整个万网站崩溃,都会采用一些技术手段来避免发生系统性灾难。这些技术中比较典型的就是限流、降级和熔断。这次就来讲讲什么是服务熔断,以及如何在微服务架构中做服务熔断。为什么需要熔断现在很多网站的背后都是一个庞大的《分布式》系统,多个系统之间的交互大多数都是采用《RPC》的方式,但是因为是远程调用,所以被调用者的服务的可用情况其实是不可控的。而越是庞大的系统,上下游的调用链就会越长,而如果在一个很长的调用链中,某一个服务由于某种原因导致响应时间很长,或者完全无响应,那么就可能把整个分布式系统都拖垮。以上调用链,如果其中某一个服务由于自身原因导致响应很慢,那么就可能导致上游的服务影响也很慢,这样循环往复,就会导致整个系统全线崩溃,这就是服务雪崩。其实,在分布式系统中,为了保证整体服务可用性和一致性,很多系统都会引入重试机制,在有些情况下,重试其实是可以解决问题的,比如网络问题等,都可以通过重试来解决。但是,有些情况下,重试并不能解决问题,返而会加剧问题的严重性,比如下游系统因为请求量太大,导致CPU已经被打满,说着数据库连接池被占满,这时候上游系统调不通就会不断进行重试,这种重试请求,对于下游系统来说,无疑是雪上加霜,给下游系统造成二次伤害。而分布式系统,大多数的服务雪崩也都是因为不断重试导致的,这种重试有可能是框架级别的自动重试、有可能是代码级别的重试逻辑、还有可能是用户的主动重试。有些重试是无法避免的,而且如果因为防止雪崩,就不设计重试机制,也是一种因噎废食。熔断器模式熔断器模式(Circuit
2020年3月16日