java进阶架构师

其他

合集 | Java进阶架构师 共500篇优质技术文章整理| 建议打开

专题天真!这简历一看就是包装过的五步准备一份漂亮的Java简历!如何在面试中介绍自己的项目经验?如果有以下几点,就悬了在做技术面试官时,我是这样甄别大忽悠的——如果面试时你有这样的表现,估计悬BAT
2020年3月3日
其他

【原创】Java并发编程系列14 | AQS源码分析

3.线程没有抢到锁,addWaiter()方法将当前线程封装成node加入同步队列,并将node交由acquireQueued()处理。
2020年2月17日
其他

【原创】Java并发编程系列13 | LookSupport

}}thread线程park阻塞。主线程sleep3s之后,unpark(thread)。thread被唤醒,输出"thread线程被唤醒"。2.
2020年2月16日
其他

【原创】Java并发编程系列12 | 揭秘CAS

newValue):将实例中的值更新为新值newValue,并返回旧值;getAndIncrement():以原子的方式将实例中的原值加1,返回的是自增前的旧值;用法:public
2020年2月14日
其他

【基础不牢地动山摇】一遍记住 Java 面试中常用的八种排序算法与代码实现!

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达1.直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四个数、第五个数……直到最后一个数,重复第二步。如何写成代码:首先设定插入次数,即循环次数,for(int
2020年2月6日
其他

实战 | SpringBoot+Redis分布式锁:模拟抢单

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:神牛003cnblogs.com/wangrudong003/p/10627539.htmlredis相关文章:分布式系统关注点——先写DB还是「缓存」?付磊:一份完整的阿里云
2020年2月5日
其他

源码探秘:Tomcat 在 SpringBoot 中是如何启动的?

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达作者:木木匠来源:https://my.oschina.net/luozhou/blog/3088908前言[1]从
2020年2月4日
其他

实战 | SpringBoot实现过滤器、拦截器与切片

作者:七印missjuejin.im/post/5c6901206fb9a049af6dcdcfQ:使用过滤器、拦截器与切片实现每个请求耗时的统计,并比较三者的区别与联系过滤器Filter过滤器概念Filter是J2E中来的,可以看做是Servlet的一种“加强版”,它主要用于对用户请求进行预处理和后处理,拥有一个典型的处理链。Filter也可以对用户请求生成响应,这一点与Servlet相同,但实际上很少会使用Filter向用户请求生成响应。使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行预处理并生成响应,最后Filter再对服务器响应进行后处理。过滤器作用在JavaDoc中给出了几种过滤器的作用Examples
2020年2月3日
其他

【面经】高频面试题:如何保证缓存与数据库的双写一致性?

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?Cache
2020年1月31日
其他

【面经】我三年开发经验,从字节跳动抖音组离职后,一口气拿到15家公司Offer,薪资再一次直线上涨~

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:https://dwz.cn/e7eGd2yz本来想着过年师长就不更新了,大伙好好休息不要老是看技术了,结果出了这档子事,相信大家大部分应该老老实实呆在家里的吧,那还是把时间利用起来,学习学习!既保证了安全,又能为新年伊始跳槽涨薪做准备,所以分享一篇看到的不错的面经文章给大家,希望能有所收获!正文我这篇文章并不是简单的描述一些面试中的题,或者总结一些技术知识,而是想记录我整个的想法和准备的过程,以及一些心得体会,让大家更加全面的去看待工作、跳槽和生活(从我的角度,当然肯定有不合理的地方,大家借鉴就好)在字节跳动的两年时间中见证了抖音从百万日活到2.5亿、团队从10人到100多人的过程,技术上不同时期的选型以及迭代、沉淀和更替。项目上经历了一个工程到模块化再到组件化最后插件化,深刻理解项目不同阶段和不同体量的时候技术框架的选型。流程上不同阶段不同的方案,一直在探索最大的效率的协同开发。产品上从不断试错到稳步发展的过程,也就是数据驱动业务的过程。字节跳动是一个伟大的公司,优秀的同事真是数不胜数,我在其中只是一个菜鸟,仰望各种大佬,不管是从技术方面还是做人做事的方面都学到了很多、成长了很多。在抖音的两年十分感谢我的同事、领导对我的帮助和提携,尤其是亨惠、火火老师、马老师、夏老师、将军、若雷、乐华、龙博等等一群大牛,还有漂亮的pm小姐姐佳鑫,和帅气的设计师冬冬,只能说我是何其的幸运,能够和一群优秀的同事一起共事、见证一款伟大app的崛起。这次面试了以下几个公司(不是面试顺序):Airbnb、快陪练、探探、猿辅导、趣头条、脉脉、动动、瓜子二手车、伴鱼、最右、BIGO、音娱、快手、小红书、美菜网、微软、亚马逊、Ihandy、饿了么、爱奇艺、右划。其中面试没通过的是:脉脉(一面挂),其他的公司都到了hr面谈薪资,美菜网、音娱、动动、猿题库等公司hr开诚布公的跟我说给不了我要的价钱,虽然技术面评价不错,我也明白,由于拿到一些offer后,我对不太想去的公司会要的比较高,我自己都觉得肯定不会给。微软和亚马逊有另外的情况,因为当时已经基本确定拿到Airbnb的offer加上眼睛因为上火长了针眼,特别疼,就直接拒绝了。可能有同学发现了,为什么这次我没有去BAT去试试(百度、阿里、腾讯),百度的确没有投递,阿里和腾讯不是我不想去,实在是太慢了(可能是我没有走内推,而是在boss投递的原因),基本上是投递后一个月后才告诉我简历通过去面试。为什么要跳槽为什么要跳槽,这个问题一定要思考清楚,因为跳槽的成本其实是挺大的,在一家公司积累的不仅仅是人脉还有对当前行业以及业务的熟悉度,新进入一家公司,一切需要从头再来,需要快速的证明自己,尤其是技术人员,还有就是对新环境和代码的熟悉,这些都是成本,所以在跳槽前,一定要想好,为什么要跳槽。其实马爸爸有一句经典的话“要么钱没给到位,要么心委屈了”,说的很形象,我这里再细说一下:钱没给到位,其实所有的人对自己的评价都是比自己真实的水平要高一些,这就导致,大部分人认为自己现在贡献很大,老板应该加薪,尤其是看到一些同事做的不如自己(可能是自己认为),工资拿的和自己一样,甚至比自己高,那就更加有钱给的少了的感觉。做的事情是否有价值或者说是否有持续盈利的趋势,这个很重要,一个公司的产品不盈利没前景,就算给你开不错的工资,作为一个不想混吃等死的人来说,都不想继续再待下去。机会,作为一个已经有3年工作经验的人来说,这个时候更加需要的是一个机会,能够证明自己,给公司带来更大的价值,完成进一步的突破,如果当前的公司并不能给你这个机会,那么你就需要考虑跳槽了。那么跳槽的核心就是利益最大化,当然这里说的利益,不仅仅是薪资福利,还有自己的职业规划。职业规划作为技术人员,我大概总结了下面三个方向,其实哪个方向都是大有可为,关键还是要看自己。技术经理架构师专项领域的专家薪资福利作为一个不再年轻的程序员来说,已经不能忽略薪资和福利,不再像刚毕业的同学,只要能成长、只要平台好,薪资什么的不重要。其实每个阶段都有自己的侧重点,我大概对薪资、平台、成长排了个序(自己的观点)1~3年,平台>=成长>薪资3~5年,平台>=薪资>=成长5~10年,平台=薪资>成长(这个阶段也可叫做规划)上面是自己不成熟的看法,从自身的一些经验出发的,仅供参考。准备这是最辛苦的阶段,你不仅要把日常的工作做好,还要开始着手准备刷题、基础知识准备以及高阶知识的准备,除此之外我还对英语进行了一些准备,由于不管是想去外企、出国以及看英文的文档,英语都是必不可少的,英语在我们的日常生活中也越来越重要,我们要,整个阶段大概持续了4个多月。其实每一次跳槽,都是对这几年工作的一个梳理和总结,虽然大家都明白“面试造火箭、进去拧螺丝”的道理,对于公司而言,这是筛选人才的一个方式,毕竟人是第一生产力,只要有优秀的人才,那么造出的火箭才可能“一飞冲天”。对于个人而言,如果公司里同事优秀的人,那么你肯定也不会差,我们肯定更希望和优秀的人一起共事。刷题我的方式还是之前的老套路LeetCode+《剑指offer》,虽然老,但是效果非常不错。这个过程不仅是个脑力活还是体力活,由于不能再公司刷题,我一般的选择方式是在晚上回到家后,由于公司经常加班,我通常到家是10:00-11:00期间,先锻炼半个小时(一会再聊这个事情),然后刷题半个小时到一个小时。当然也可以在上下班的路上抽时间看看题。LeetCode,刷了300+的题,这里的刷并不是指仅仅只刷一遍,我来回刷了四遍,手写了一遍(写了200多道),保证我看到题目或者类似的题目,我能第一时间想出最优的解题思路。《剑指offer》,这本书真的很棒,总结的很到位,以及每个阶段的思路写的都很详细,我是百看不厌,大概50+题,多看几遍,这能做到举一反三。基础知识由于面的Android岗位,需要准备一些Java和Android方面的知识,有很多的文章都会去介绍怎么去复习基础的知识或者进阶知识,或者是阅读一些经典的面试数据,例如任玉刚的《Android开发艺术探索》,都是非常不错的。大家可以根据网上的文章和一些数据梳理一个自己的知识体系,将一个一个知识点形成点再到面,这样能更加深刻的理解,而且有自己的侧重点。简历简历的重要性就不言而喻了,怎么样写好简历是个技术活,当然如果你有很好的背景(学校或者公司),那么不管你怎么写,基本上都不刷掉你,我们作为一般的人还是需要下一番功夫的。拿我的简历作为例子,大概有以下几个部分:个人信息:姓名、出生日期、教育背景、博客地址、github地址、联系方式(手机、邮箱和微信号)工作经历:毕业后待过哪些公司,一般是倒序,项目尽量精简明了,可以参考SMART原则专业技能:自己熟悉的一些技能,这个为什么我写到最后,因为对于工作三年的同学来说,面试官更加注重的是你的项目经历,大部分面试都是看你的项目经历来提问。怎样写简历,这个开源网站不错,教你怎么写简历,而且有一个在线markdown在线网站,可以导出pdf。英语其实这个过程对于大部分同学来说是不用准备的,由于我这次想去外企试试,而且,英语在我们的日常生活中也越来越重要,不论是看英文文档、电影、外出旅游,都成为了必不可少的一种技能,所以我在2018年中旬就开始准备学习英语了,我学习英语的方式有下面三种薄荷阅读,到写这篇文章为止已经坚持了259天,每天10分钟,薄荷阅读一般在下班的路上听读,这个确实不错,而且可以选择适合自己水平的小说,每天就当看小说,这个过程还是很愉悦和放松的(感觉又回到我大学,看玄幻和武侠小说的时候,诛仙、庆余年、雪中悍刀行、将夜以及金庸的小说,鹿鼎记我就看了3遍),目前看了黑骏马、小王子、纳尼亚传奇、傲慢与偏见、真爱至上(遇见你之前)和真实人类(正在读)百斩词,坚持了214天,每天10-20分钟,在午休的时间。流利说,坚持了188天,每天30-40分钟,在午休时间(头条是12:00-14:00),由于需要跟读一些文章,一般会找一个小的会议室。整个过程真的很枯燥,由于目标很模糊,只是学好英文,可以简单对话,但是这个目标太宽泛和不明确,中途好几次想要放弃,但是想了想还是坚持了下来,得出的结论是,做一件事情前要设定一个明确的目标。收获:单词量增加了很多,阅读的水平也提高了,可以无障碍的阅读大部分的英语文档和英文小说。听力增长的也比较快,一般的文章,不看文字,大致能挺动,但是口语就是一般了,由于流利说只是跟读或者背诵,提高的并不多,但是纠正了一些读音。锻炼“身体是革命的本钱”,这句话我本人十分认可,就算你技术世界第一,如果身体不好,那么也是空谈,我一直坚持着健身,基本上每天早上半个小时和晚上回到家半个小时,跟着Keep来做运动。每天早上半个小时和晚上回到家半个小时,跟着Keep来做运动。周六日,如果没事,游泳2个小时,将近4公里。前一段时间体检,我的尿酸过高,这是是由于肉类、豆制品以及海鲜吃的过多(字节跳动的伙食真是太好了,每天各种肉类,每次都忍不住要多夹一些),而且不运动,我这个就纳闷了,我每天都在坚持运动呀,医生告诉我,我做的是无氧运动,会产生肌酸,和尿酸还会产生竞争关系,由于都是通过肾来分解,中间也有大概半年停止了游泳,所以我就克制吃肉了,而且又恢复了游泳,过了1个月检查,就减下来了。大家一定要挤出时间来锻炼,身体好才能工作有精神,而且身体是自己,一定要珍惜。面试由于时间的原因,有一些面试题记录的不是非常的详细,但是大致是这些,可能会漏掉一些题。这篇总结与2017年面试总结一样,我并不会给出答案,一个是因为,面试太多,细节实在记不住,而且有些题也有可能记错,有时候一天最多面试了4家,从早上10点到晚上9点一直在面试,我连续面试一周后,直接上火了,眼睛长了个针眼,肿的老大了。二是因为,我这篇文章主要目的并不是带你复习Android的相应知识点,而且每个人都有自己的侧重点。“求其上者得其中,求其中者得其下”,按照这个原则这次面试我就大胆的面试架构师或者能够带人的职位,所以很多问题都是架构的考虑和知识的广度以及自己的思考,这些回答很大程度上是开放题,相信大家都有自己的想法和见解,我就不班门弄斧了,真的是因为抖音发展的太快,见识了太多的问题和优秀解决方案,所以只要自己用点心,可以学的地方还是很多的。1公司:快陪练还是先填个人信息表格,其实我不太喜欢这种方式,一上来就是个人的详细信息,你又没有给我发offer,我也没决定要来,而且还没技术面。不过既然来了就要尊重公司的办事方式,我只简单写了一下我觉得可以告诉公司的个人信息。然后做了一份笔试题,一道算法和一些网络方面的知识,不难。快陪练整体的环境并不是很好,环境很嘈杂,而且我是在门口面试的,很乱。一面MVC、MVP和MVVM的原理和区别设计的六大基础原则使用UML画一下访问者设计模式二面先聊了聊为什么离开现在公司,毕竟现在这么火我做的项目中的一些解决方案,组件化、字节码注入、包体积的极致优化直播的架构设计三面设计一个上传日志的大小,涉及到,性能、文件大小、怎样压缩、时机、TopK问题等聊了聊在字节跳动做的事情总结是一家创业公司,给的薪资还是挺不错的,但是由于是996,没有加班工资,多出来的钱可能就是加班工资吧,后面听hr说公司正在打算取消9962公司:探探是通过脉脉上网红马映怡推荐的,马映怡之前在字节跳动,今年4月份到了探探,在脉脉找到了我,正好我有出去看看的意向,就约了时间去面试,探探的办公环境还是比较好的。一面OpenGL一些知识,顶点着色器、片元着色器的工作原理,什么是VBO(这个没想起来),以及shader的一些简单问题View的事件传递机制包体积优化JVM相关知识,Dalvik和ART的区别组件化的实现方案算法题,ViewGroup的层级深度,转换为二叉树的层级深度二面二面面试官,比较注重思维,我理解为聪不聪明的意思,有点脑筋急转弯的意思,要求的最简单有效的方法。RecyclerView防止内存OOM的一道题,充分利用自身的缓存机制,可能我始终没理解问题所在,虽然给出解决方案,但是面试官不满意,太繁琐讨论LRUcache的实现和时间复杂度三面cto面试聊了一下抖音发展的过程中我的角色,做过什么事情,有什么收益在华为的一些经历,为什么离开华为聊了一到算法题,查找两个字符串的交集和字符串1中有字符串2中没有的问题。四面这次主要是聊一下我将要做的工作,以及让其他面试官再次了解一下我,因为评级比较高,所以需要谨慎点。总结整体来说探探发展还是不错,尤其近两年要上市(和陌陌签了对赌协议),环境也不错,管三餐,加班不严重,双休,工资也给力,但是也是由于近两年要上市,所以要做的东西还是比较多和急,需要你有一定的能力。很尴尬的是在给我offer的第二周,探探就被Android市场下架了。3公司:猿题库我是在boss投递的猿题库的Android开发岗位,结果hr小姐姐把我当成了server开发,先进来一位server的童鞋,让我写了一到算法题(二叉树的镜像),然后看看我的简历问我,是不是面试android的,我说是,她尴尬的说我是server面试官,然后赶紧与hr沟通,调整成为Android。猿题库面试应该是有硬性的时间指标,应该是每一轮面试都要差不多1个小时,并且会出1~2道算法题。一面热修复,主要说了ClassLoader的方式和Rubost的插装方式,重点介绍了Rubost的原理。实现直播礼物的一些技术选型,和播放带有alpha通道MP4的解决方案怎么实现字节码注入抖音组件的探索,SPI到字节码注入,优缺点。接下来就是两道算法题1.
2020年1月26日
其他

【面经】PDD面试官竟然问我new一个对象背后发生了什么?这太难了...

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达作者:沉默哥来源:https://url.cn/5V55xBuJava在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。我们先假设是第一次使用该类,这样的话new一个对象就可以分为两个过程:加载并初始化类和创建对象。类加载过程(第一次使用该类)java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工作过程:双亲委托模型的工作过程是:如果一个类加载器(ClassLoader)收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需要加载的类)时,子加载器才会尝试自己去加载。使用双亲委托机制的好处是:能够有效确保一个类的全局唯一性,当程序中出现多个限定名相同的类时,类加载器在执行加载时,始终只会加载其中的某一个类。1、加载由类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,并存储在运行时内存区的方法区,然后将其转换为一个与目标类型对应的java.lang.Class对象实例2、验证格式验证:验证是否符合class文件规范语义验证:检查一个被标记为final的类型是否包含子类;检查一个类中的final方法是否被子类进行重写;确保父类和子类之间没有不兼容的一些方法声明(比如方法签名相同,但方法的返回值不同)操作验证:在操作数栈中的数据必须进行正确的操作,对常量池中的各种符号引用执行验证(通常在解析阶段执行,检查是否可以通过符号引用中描述的全限定名定位到指定类型上,以及类成员信息的访问修饰符是否允许访问等)3、准备为类中的所有静态变量分配内存空间,并为其设置一个初始值(由于还没有产生对象,实例变量不在此操作范围内)被final修饰的static变量(常量),会直接赋值;4、解析将常量池中的符号引用转为直接引用(得到类或者字段、方法在内存中的指针或者偏移量,以便直接调用该方法),这个可以在初始化之后再执行。解析需要静态绑定的内容。//
2020年1月23日
其他

ElasticSearch 亿级数据检索案例实战!

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:https://www.cnblogs.com/mikevictor07/p/10006553.html一、前言数据平台已迭代三个版本,从头开始遇到很多常见的难题,终于有片段时间整理一些已完善的文档,在此分享以供所需朋友的实现参考,少走些弯路,在此篇幅中偏重于ES的优化,关于HBase,Hadoop的设计优化估计有很多文章可以参考,不再赘述。二、需求说明项目背景:在一业务系统中,部分表每天的数据量过亿,已按天分表,但业务上受限于按天查询,并且DB中只能保留3个月的数据(硬件高配),分库代价较高。改进版本目标:数据能跨月查询,并且支持1年以上的历史数据查询与导出。按条件的数据查询秒级返回。三、elasticsearch检索原理3.1
2020年1月20日
其他

【面经】通过五轮面试的阿里实习生亲述!

下面是面试中的问到的问题:来个自我介绍呗,不超过3分钟介绍下你最熟悉的项目项目使用了什么架构,亮点是什么平时主要学习什么课程你目前的研究方向是什么家是哪的喜欢看什么书大概什么时候能来实习呢
2020年1月19日
自由知乎 自由微博
其他

【面经】面试官问:线程池除了常见的4种拒绝策略,你还知道哪些?

});ActiveMq中的策略属于最大努力执行任务型,当触发拒绝策略时,在尝试一分钟的时间重新将任务塞进任务队列,当一分钟超时还没成功时,就抛出异常pinpoint中的线程池拒绝策略public
2020年1月18日
其他

【面经】慌了,面试居然被问到怎么做高并发系统的限流?

burst=5;上面设置定义了每个IP的请求处理只能限制在每秒1个。并且服务端可以为每个IP缓存5个请求,如果操作了5个请求,请求就会被丢弃。使用ab测试模拟客户端连续访问10次:ab
2020年1月17日
其他

巧用Java8中的Stream,让集合操作飞起来!

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达作者:坚持就是胜利juejin.im/post/5d5e2616f265da03b638b28a简介java8也出来好久了,接口默认方法,lambda表达式,函数式接口,Date
2020年1月15日
其他

Redis是如何实现点赞、取消点赞的?

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达作者:solocoderjuejin.im/post/5bdc257e6fb9a049ba410098redis相关文章:分布式系统关注点——先写DB还是「缓存」?付磊:一份完整的阿里云
2020年1月14日
其他

干货 | 新手也能看懂的源码阅读技巧

DBConnectionManager.getInstance().getConnection(getDataSource());那么我们的job中就可以按如下方式操作数据库了public
2020年1月8日
其他

【原创】Java并发编程系列11 | 线程调度

篇,前面几篇没看过的,可以在文末找到前几篇的跳转链接。本文介绍线程调度的如下几个操作:线程优先级守护线程线程中断joinsleepyieldwait
2020年1月7日
其他

基于Nginx实现访问控制、连接限制

user1:$apr1$7v/m0.IF$2kpM9NVVxbAv.jSUvUQr01user2:$apr1$XmoO4Zzy$Df76U0Gzxbd7.5vXE0UsE0
2020年1月2日
其他

京东到家订单订单查询服务演进

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达背景:京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况。京东到家的订单数据存储在Mysql中,但显然只通过DB来支撑大量的查询是不可取的,同时对于一些复杂的查询,Mysql支持得不够友好,所以订单中心系统使用了Elasticsearch来承载订单查询的主要压力。Elasticsearch
2019年12月31日
其他

冒着挂科的风险也要给你们看的 Spring Cloud 入门总结

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来自:掘金(作者:FrancisQ)原文链接:https://juejin.im/post/5de2553e5188256e885f4fa3写在前面的话马上要考试了!!!作为一个苦逼的在读大学生,又要面临半年一度的期末考试了,因为上课没听,我啥都不会,什么通信原理,单片机。。。饶了我吧!!!给你们看看我上课在干啥你就知道我为啥啥都不会了。上课笔记。。emmm,字比较丑😑。我还记得那是一堂英语课,老师不让用电子设备,我只能手写我这篇文章的思路。。。所以,冒着期末要挂科的风险👊,我也得把这篇文章写完,给大家分享知识,自己也能重新复习和认识一下
2019年12月30日
其他

私藏!我是如何用redis做实时订阅推送的?

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达作者丨浮云骑士LIN来源:www.cnblogs.com/linlinismine/p/9214299.html前阵子,根据大家的需求,陆续发了redis相关的文章:分布式系统关注点——先写DB还是「缓存」?付磊:一份完整的阿里云
2019年12月27日
其他

Kafka为什么速度那么快?

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:cnblogs.com/binyue/p/10308754.html前阵子,师长给大家系统梳理过Kafka相关知识点,如下几篇:RabbitMQ和Kafka到底怎么选?17
2019年12月26日
其他

【原创】008 | SpringBoot 源码专车总结(共8篇)

三个核心概念:切面、切点、通知。下面我会带着你领略框架是如何依照核心来实现事务的。看到这里,我认为你应该会有种恍然大悟的感觉,为什么使用事务要使用@Transactional
2019年12月25日
其他

利用 Redis 实现“附近的人”功能!

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:https://urlify.cn/eA3aAf针对“附近的人”这一位置服务领域的应用场景,常见的可使用
2019年12月24日
其他

分库分表就能无限扩容吗,解释得太好了!

当业务越来越大,我们需要对服务进行水平扩容,扩容很简单,只要保证服务是无状态的就可以了,如下图:当业务又越来越大,我们的服务关系错综复杂,同时,有很多服务访问都是不需要连接
2019年12月23日
其他

面试字节跳动,我被面试官狂怼全过程!

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:http://iii62.cn/cwgX7Q人们都说,这个世界上有两种人注定单身,一种是太优秀的,另一种是太平凡的。我一听呀?那我这岂不是就不优秀了吗,于是毅然决然和女朋友分了手。人们都说,互联网寒冬来了,这个时候还在大面积招人的公司,必然是牛逼的公司。而这个时候勇敢跳槽的人,必然是牛逼的人。于是我开始了字节跳动的社招面试。为了这天,我前一天排老长的队理了个利落的发型,胡子刮得一干二净。穿上崭新的新百伦999,连袜子都是崭新的NB,墨绿色工装裤配酒红色卫衣,外面再搭一件精致的黑色羽绒小坎肩,准时准点出现在电脑屏幕前,准备开始视频面试。去面试今日头条,你最好有点心理准备。我面试过头条的好兄弟给了我一句忠告。不过邮件对考查内容写的一清二楚,所以一面,我并没有做太强的心理建设,事实证明我可能对通用型业务和软性技能的理解还不够透彻。时间到了,画面里出现一个面积很小的房间,面试官坐在里面调节姿势和座椅靠背。这不是我第一次,但我却比第一次还紧张。面试官跟我的一位闷骚朋友很像,长相、气质、说话声音如出一辙......确认过眼神,我们在初次见面的紧张和局促中正式开始,前戏的部分大同小异,自我介绍,公司职能,项目简介。小作坊走出来的小猿,项目经验并不出彩,没有高并发,没有分布式,前端后台服务器和数据库部署在同一台机器上。为了不显的太low又假装不经意提了提自己在GitHub上有自己的开源框架,但是他并不care。我的花样耍完了,就到了他肆意挥舞小皮鞭的环节。“我看你项目上都是偏独立开发,或者你一个人在项目中承担了很大的比重。那你能不能说说你们的项目在部署的时候用的是怎样的架构?”“主要就是Django部署那一套,nginx+uwsgi+Django+MySQL。”“那你详细说一下nginx在部署的时候有哪些必要的配置?”“这个我在nginx里配置了端口的转发,对外监听80或443,然后转发到内部uwsgi的端口,由uwsgi来处理业务请求,部署Django项目。”显然我对Nginx的认知仅仅局限在配置个端口反向代理,偷换概念企图蒙混过关。“不是,我的意思是Nginx当中不是有很多参数配置嘛,你在项目部署的时候那些参数是必要的配置,有哪些可以调优”对方识破了我的小伎俩,并不给我蒙混过关的机会,无奈我只得低头认怂,表示并没有用过其他配置,出师未捷就挨了当头一棒。“那你再说说uwsgi它的工作原理吧,它的底层是怎么工作的。”因为紧张的缘故,原本不会的知识,一下子变得还是不会,囫囵吞枣地讲它代理一个服务端口,分配不同的线程处理客户端浏览器的请求。“那他的底层是怎么实现的?看来我如果还没求饶,他就不打算放过我。......(这里省略一些不清楚、不知道、忘记了之类的词藻,保留一丝尊严。)接下来是关于redis哲学三连“是什么?为什么?怎么用?”我把肚子里仅有的关于Redis的一滴墨水挤成了三滴,仍然没有给出他想要的。继续追问Redis的数据存储方式,操作方法,读写操作在底层都是如何实现。啊~,好深。除了低头委屈说不会,内心的我已经意识到了问题的严重性,平常面试你只要一喊不行,对方就会体贴地换一个方向继续深入,这次我都快被搞哭了,他居然换了个姿势继续往深怼,这谁顶得住啊……到了这一步我的心理防线基本宣布告罄。往后又问了关系型数据库表的存储结构,我隐约记得是毕加索还是毕加树来着,完后又追问到索引的实现原理,创建一个索引怎么它就能加快查询效率。其实面试官的套路大多如此,每个技术都尽可能的深入,深到你不会为止,并不是非得要把你折磨的不能自理,而是为了考察你的技术水平到底如何。但是事到如今我的大脑已经无法给自己完成心理建设了,摧枯拉朽般智商、情商、性商、逆商全线崩盘。当然这也不能全怪我,上来就是三个大闷棍,就是李云龙来也让旅长打成懵逼了,哪里还能腾出精力开意大利炮。下一个节目到了数据结构,面试官稳准狠一步到位点到了我的敏感地带:堆。什么是最小堆?什么是最大堆?在堆中怎么插入一个元素?这个问题上值得庆幸的是,我居然急中生智,鬼使神差地用了四种不同的方式表达我不会,每种方式都尴尬而不委婉,并且还不重样。好歹面试一波儿不能让人家觉得我一无是处,多少还算有点文笔....其实我平时稍微多看哪怕一眼,知道堆的实现方式是平衡二叉树,这一连串的问题不至于答的这么惨,面试的时候脑子里记得看过栈和队列,完全不知道堆是怎么实现,下来才知道就是个平衡二叉树。这个时候的我已经被折磨的身心俱疲了,面试已经持续了将近四十分钟,嘴开始打漂,情绪紧张思维也难以集中,回答中开始大量出现我感觉、我猜、可能、应该是等高危词汇。死亡轰炸还没有结束,接着是MQ,我所使用的MQ的技术选型,为什么选它,项目中如何应用,最后无一例外,它底层是如何实现?怎么保证的稳定的消费者生产者队列?回答的中间穿插着我不自信的连接词“嗯~啊~哼~哦~”。每次我招架不住求饶喊着不要不要的时候,我都能看到面试官嘴角狡黠的微笑,由内而外的快感浮现在脸上憋都憋不住。心里暗暗发誓迟早有一天,我也要在上面。最后以一道算法编程题结束,如何给一个双向链表排序?我失去控制的舌头自作主张地把话锋导向了快速排序,那,你来写一个双向链表的快速排序吧,这个视频页面上旁边有一个编辑器,语言你随便,用c++或python都可以,大概10分钟的时间,可以吧。“那,我用C++试一下吧”我随即在编辑器里自信的def了一个quickSort函数,参数是一个int数组,还有两个int值代表low和high两个档位,函数末尾加上冒号,下一行开始缩进四个空格以示尊敬,当然代码段的区分花括号必须得有。写完这几句,双手这才收到了大脑已经在十分钟前宕机的消息,于是两手一摊表示无能为力。时间才过去一分钟,剩下时间我开始拿纸笔低头写字,沉默的面试官抬头看到还以为我在纸上排演算法,可实际上我是在拼尽最后一丝脑力回顾刚才他问我的问题,倒不是为了面试后好好复习,主要是我一会儿要写知乎,哈哈,我可真是个小机灵鬼。期间面试官也用自己的代码快速的敲击键盘,听声音猜大概是在吐槽HR,筛选简历的时候长点心,找来面试的这都什么玩意儿。时间差不多了,再一次厚着脸皮主动承认自己写不出来。实际上,我哪怕正经用C++写一个数组的快速排序也算话,然而当时的我满身只剩下疲惫,痛苦和羞辱。面试官终于放我走人,长达一个小时的视频聊天终于结束,关掉视频的一刹那,随着浑身一阵抽搐,整个人瘫软在椅子上。我是谁?我在哪儿?刚才发生了什么?哦,刚才发生了那种事情。我之前对那种事情还挺向往的,内心对此充满了激情和憧憬,怎么现在,对这件事情一点兴趣也没了?现在只想这么瘫着什么也不想做。要不要点根烟抽抽?哦对了我不抽烟。原来贤者时间脑子里这么多想法……飘飘忽忽浑浑噩噩,脑海里一直回荡着周董的音乐:这感觉已经不对我最后才了解,一页页不忍翻阅的情节我好累,你沉默看我掉过几次泪多憔悴,而我心碎你受罪你的offer,我不配~~~!面试过程和提到的问题大致如此,为了阅读体验有部分艺术修饰,但是内容全部都是真实的。接下来咱们说点正经的。讲真的现在的我只想把头插到土里再也不出来,之前写过超级浓的鸡汤,讲学习方法,被技术号拿去直接顶置到现在;写过高赞,讲连连看的外挂,到现在还有人私信问我能不能做外挂的私活儿,一天上千的利润;作为培训讲师讲培训机构内幕,有上海北京的培训机构给到一小时1k了我不想去,想趁年轻进大厂做技术。在大家一顿商业吹捧之下就真的以为自己是个大佬了。有极少数的人在评论区怼我说花拳绣腿,说我二本渣渣热衷于误人子弟,我都不以为然,心里想着等我有一天拿着大厂的offer回来证明自己!到今天总算知道他们说的是对的,打嘴炮和真有能耐是不一样的。今天这轮面试,算是被扒了个体无完肤,可以说是程序员面试的反面典型,当然我也不怕说出来,菜就是菜,吹水就是吹水,努力把吹过的水早日兑现,迟早有一天能成真正的大佬!这次作为loser再说说在求职前期准备过程中暴露出的问题,望大家引以为戒。1、尽量早早做好准备面试不应该是准备好了才去,而是时刻都准备好了。如果非要说从什么时候开始准备离职跳槽,我的建议是半年。别像我一样,面试了才开始看算法和数据结构。2、先找小公司面几次进入状态,再投大公司一举拿下。我蠢到一开始就动用了我所有的人脉,投了bat及其他二线大厂所有的内推。算上字节跳动已经是我黄掉的第三个响当当大厂了,踩着大厂当垫脚石攒面试经,除了觉得自己蠢,我还觉得自己真特么牛逼。3、你的简历,就是复习大纲总有人拿网上找到的拿了bat
2019年12月22日
其他

Kafka 基本原理(8000 字小结)

Kafka,大部分觉得讲的很好,但是又有杠粉问了,咋地,还不够清晰啊,有没有更清晰的给看下。先回顾下之前Kafka的系列文章,没看过的可以先收藏:RabbitMQ和Kafka到底怎么选?17
2019年12月20日
其他

一个妹子的后台面试经验总结(蚂蚁金服+美团+携程+滴滴+....)

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达出处:网络今天给大家带来一个优秀妹子的后台面试经验总结,希望对正在面试或者以后需要面试的人提供一些参考和帮助。具体如下:本人妹子,985硕士,211本科,专业都是软件工程,一直投的是java后台开发,只投过一次网易的测试,技术不是大牛,但是比较努力。实验室没有项目,so项目经验是0,在去年这个时候看到实验室师兄找工作的艰难,因此开始复习的时间比较早。最开始先看的java基础,看的毕某某的视频,后面就看框架视频,后来也看过某某学院的视频,都是在网上找的免费的。《剑指offer》刷了一遍,有些重点的题一定要滚瓜烂熟。《大话设计模式》《mysql必知必会》《程序员面试金典》《java并发编程实战》《计算机操作系统第三版》《计算机网络》都看了一遍,《深入理解java虚拟机》看了两遍。《java编程思想》《Java数据结构和算法中文第二版》《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》《Struts2
2019年12月19日
其他

【原创】Java并发编程系列10 | 线程状态

新线程继承了parent线程的group、是否为Daemon、优先级priority、加载资源的contextClassLoader、可继承的ThreadLocal。
2019年12月18日
其他

Web登录其实没那么简单

HTTP协议传输直接暴露用户密码字段在网络传输过程中,被嗅探到的话会直接危及用户信息安全,以Fiddler或Wireshark为例,发现捕获的HTTP报文中包含敏感信息:3.
2019年12月16日
其他

面试官是怎么来考察你对ES搜索引擎的理解?

的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。案例:有以下文档DocIdDoc1谷歌地图之父跳槽
2019年12月15日
其他

我挂树上了:一道树的面试题

Tree),二叉是分叉的意思,就是用边区分。节点最多有两个子节点,分别为左子节点和右子节点。连接节点的就是边,所以节点最多会有三条边。二叉树的场景很多,比如用来表示算术表达式等等。如图:值为
2019年12月14日
其他

大白话+13张图解 Kafka

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达转自:掘金juejin.im/post/5dcf6b6e51882510a23314f3前言应大部分的小伙伴的要求,在Yarn之前先来一个kafka的小插曲,轻松愉快。一、Kafka基础消息系统的作用应该大部份小伙伴都清楚,用机油装箱举个例子所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。引入一个场景,我们知道中国移动,中国联通,中国电信的日志处理,是交给外包去做大数据分析的,假设现在它们的日志都交给了你做的系统去做用户画像分析。按照刚刚前面提到的消息系统的作用,我们知道了消息系统其实就是一个模拟缓存,且仅仅是起到了缓存的作用而并不是真正的缓存,数据仍然是存储在磁盘上面而不是内存。1.Topic
2019年12月11日
其他

为什么微服务一定要有网关?

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达作者:赵计刚https://www.cnblogs.com/java-zhao/p/6716059.html1
2019年12月10日
其他

讲给小白的大白话布隆过滤器

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:CodeBear链接:cnblogs.com/CodeBear/p/10911177.html本文是站在小白的角度去讨论布隆过滤器,肥西互喷。不知道从什么时候开始,本来默默无闻的布隆过滤器一下子名声大燥,仿佛身在互联网,做着开发的,无人不知,无人不晓,哪怕对技术不是很关心的小伙伴也听过它的名号。我也花了不少时间去研究布隆过滤器,看了不少博客,无奈不是科班出身,又没有那么聪明的头脑,又比较懒...经过“放弃,拿起,放弃,拿起”的无限轮回,应该算是了解了布隆过滤器的核心思想,所以想给大家分享下。布隆过滤器的应用我们先来看下布隆过滤器的应用场景,让大家知道神奇的布隆过滤器到底能做什么。缓存穿透我们经常会把一部分数据放在Redis等缓存,比如产品详情。这样有查询请求进来,我们可以根据产品Id直接去缓存中取数据,而不用读取数据库,这是提升性能最简单,最普遍,也是最有效的做法。一般的查询请求流程是这样的:先查缓存,有缓存的话直接返回,如果缓存中没有,再去数据库查询,然后再把数据库取出来的数据放入缓存,一切看起来很美好。但是如果现在有大量请求进来,而且都在请求一个不存在的产品Id,会发生什么?既然产品Id都不存在,那么肯定没有缓存,没有缓存,那么大量的请求都怼到数据库,数据库的压力一下子就上来了,还有可能把数据库打死。虽然有很多办法都可以解决这问题,但是我们的主角是“布隆过滤器”,没错,“布隆过滤器”就可以解决(缓解)缓存穿透问题。至于为什么说是“缓解”,看下去你就明白了。大量数据,判断给定的是否在其中现在有大量的数据,而这些数据的大小已经远远超出了服务器的内存,现在再给你一个数据,如何判断给你的数据在不在其中。如果服务器的内存足够大,那么用HashMap是一个不错的解决方案,理论上的时间复杂度可以达到O(1)但是现在数据的大小已经远远超出了服务器的内存,所以无法使用HashMap,这个时候就可以使用“布隆过滤器”来解决这个问题。但是还是同样的,会有一定的“误判率”。什么是布隆过滤器布隆过滤器是一个叫“布隆”的人提出的,它本身是一个很长的二进制向量,既然是二进制的向量,那么显而易见的,存放的不是0,就是1。现在我们新建一个长度为16的布隆过滤器,默认值都是0,就像下面这样:现在需要添加一个数据:我们通过某种计算方式,比如Hash1,计算出了Hash1(数据)=5,我们就把下标为5的格子改成1,就像下面这样:我们又通过某种计算方式,比如Hash2,计算出了Hash2(数据)=9,我们就把下标为9的格子改成1,就像下面这样:还是通过某种计算方式,比如Hash3,计算出了Hash3(数据)=2,我们就把下标为2的格子改成1,就像下面这样:这样,刚才添加的数据就占据了布隆过滤器“5”,“9”,“2”三个格子。可以看出,仅仅从布隆过滤器本身而言,根本没有存放完整的数据,只是运用一系列随机映射函数计算出位置,然后填充二进制向量。这有什么用呢?比如现在再给你一个数据,你要判断这个数据是否重复,你怎么做?你只需利用上面的三种固定的计算方式,计算出这个数据占据哪些格子,然后看看这些格子里面放置的是否都是1,如果有一个格子不为1,那么就代表这个数字不在其中。这很好理解吧,比如现在又给你了刚才你添加进去的数据,你通过三种固定的计算方式,算出的结果肯定和上面的是一模一样的,也是占据了布隆过滤器“5”,“9”,“2”三个格子。但是有一个问题需要注意,如果这些格子里面放置的都是1,不一定代表给定的数据一定重复,也许其他数据经过三种固定的计算方式算出来的结果也是相同的。这也很好理解吧,比如我们需要判断对象是否相等,是不可以仅仅判断他们的哈希值是否相等的。也就是说布隆过滤器只能判断数据是否一定不存在,而无法判断数据是否一定存在。按理来说,介绍完了新增、查询的流程,就要介绍删除的流程了,但是很遗憾的是布隆过滤器是很难做到删除数据的,为什么?你想想,比如你要删除刚才给你的数据,你把“5”,“9”,“2”三个格子都改成了0,但是可能其他的数据也映射到了“5”,“9”,“2”三个格子啊,这不就乱套了吗?相信经过我这么一介绍,大家对布隆过滤器应该有一个浅显的认识了,至少你应该清楚布隆过滤器的优缺点了:优点:由于存放的不是完整的数据,所以占用的内存很少,而且新增,查询速度够快;缺点:随着数据的增加,误判率随之增加;无法做到删除数据;只能判断数据是否一定不存在,而无法判断数据是否一定存在。可以看到,布隆过滤器的优点和缺点一样明显。在上文中,我举的例子二进制向量长度为16,由三个随机映射函数计算位置,在实际开发中,如果你要添加大量的数据,仅仅16位是远远不够的,为了让误判率降低,我们还可以用更多的随机映射函数、更长的二进制向量去计算位置。guava实现布隆过滤器现在相信你对布隆过滤器应该有一个比较感性的认识了,布隆过滤器核心思想其实并不难,难的在于如何设计随机映射函数,到底映射几次,二进制向量的长度设置为多少比较好,这可能就不是一般的开发可以驾驭的了。好在Google大佬给我们提供了开箱即用的组件,来帮助我们实现布隆过滤器,现在就让我们看看怎么Google大佬送给我们的“礼物”吧。首先在pom引入“礼物”:
2019年12月7日
其他

【原创】实战 | 用手写一个骚气的请求合并,演绎底层的真实

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达冬来冬往,越来越喜欢软绵绵的被窝了。厌倦了夏天的酷热,秋天的浮躁,来一首冬天的安静。一、服务器崩溃的思考老板说,他要做个现场营销活动,线上线下都要参与推广,这个活动参与人数可能很大哦···
2019年12月3日
其他

【原创】Java并发编程系列09 | 基础干货

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达本文为何适原创并发编程系列第9篇,前面几篇没看过的,可以在文末找到前几篇的跳转链接。现在,我们进入正题:介绍并发编程的基础性概念。并发编程的优势和缺点并发编程中常见的线程安全问题如何实现线程之间的通信?死锁是怎么发生的,如何避免?嵌套管程锁死、重入锁死、饥饿和公平。1.
2019年12月2日
其他

阿里三面被挂,幸获内推,历经5轮终于拿到口碑offer

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达作者:不穿格子衫的Java程序猿来源:https://url.cn/5ofmJLA每一个互联网人心中都有一个大厂梦,百度、阿里巴巴、腾讯是很多互联网人梦寐以求的地方,而我也不例外。但是,BAT等一线互联网大厂并不是想进就能够进的,它对人才的技术能力和学历都是有一定要求的,所以除了学历以外,我们的技术和能力都要过硬才行。今年前前后后我参加了阿里巴巴两次面试,一次是社招,一次是内推,第一次社招3面过后就被挂了,内推历经5面拿到的offer,进入的是阿里口碑部门,分享一下这次的面经,希望能帮助到大家。社招阿里巴巴(新零售部门),三面被挂阿里巴巴一面(55分钟)先介绍一下自己吧说一下自己的优缺点具体讲一下之前做过的项目你觉得项目里给里最大的挑战是什么?Hashmap为什么不用平衡树?AQS知道吗?知道哪一些呢?讲一讲。CLH同步队列是怎么实现非公平和公平的?ReetrantLock和synchronized的区别讲一下JVM的内存结构JVM
2019年11月30日
其他

【原创】如何高效管理你的js代码

那管理好js代码的好处至少就有以下为了代码复用可以只用一行代码,获取即用当你需要用别人的库且需要重写一部分代码的时候散播自己的光辉,假如自己是金子2.那如何管理js代码呢——发布npm库2.1
2019年11月29日
其他

干货 | 优秀架构师必须了解的6大方面30条设计原则

架构师更多的是和人打交道,说说我见到和听说到的架构师升级步骤和平时的工作内容架构师成长之路之限流漫谈支付宝架构师眼中的高并发架构老板让你抗住千万级流量,如何做架构设计?今日头条
2019年11月28日
其他

【原创】你所不知道的读写锁

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达大家好,我是告白,算起来自己真的是好久没有写作了,最近承蒙师长大大指点,决定还是记录一下自己的一些感想感悟。也决定好好打磨一下自己的写作水平,与大家共同进步!今天呢,我们来讲讲并发编程的读写锁-ReadWriteLock那么什么是读写锁我们知道锁基本上是排他性的(同一时刻只允许一个线程进行访问),而读写锁在同一时刻可以允许多个线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一把写锁和一把读锁,通过分离读锁和写锁,使得并发性相比于一般的锁有了很大的提升。与互斥锁相比,读写锁是否能够提高性能取决于读写数据的频率、读取和写入操作的持续时间、以及读线程和写线程之间的竞争。互斥原则读-读能共存读-写不能共存写-写不能共存ReadWriteLock
2019年11月28日
其他

还背啥redis面试题?手把手教你写个简版Redis!(附源码)

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来自:https://urlify.cn/y6zEBf今天主要介绍两个开源项目,然后创建应用最终实现的效果就像简版的redis服务那样,通过http的get请求,能够插入和获取数据,项目暂取名为kedis,源码后面会上传到git仓库。他们分别是Facebook开源的Rocksdb和netty实现的http容器RestExpress。通过实现这样的一个key/value系统实例来学习这两个框架的使用。rocksdb项目地址:https://github.com/facebook/rocksdbRocksDB是一个带key/value接口的存储引擎,其中键和值是任意字节流。它是一个C
2019年11月27日
其他

面经:为了拿到字节跳动offer,鬼知道我经历了啥...

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达作者:不穿格子衫的Java程序猿来源:https://url.cn/5IiC4LJ坐标北京,某211本科毕业生,之前学校活动有去过字节跳动公司总部参观,所以一直以来就蛮想进入字节工作的,被字节的企业文化和工作氛围所影响。字节作为发展速度最快的互联网公司,旗下的很多产品的用户都比肩BAT了,所以自己也算是字节的死忠粉了。今年秋招,别的公司基本没怎么准备,因为很早定下的目标就是字节跳动,所以提前了2个月来准备这次字节的面试,从接到面试通知,到拿到offer共336小时53分钟21秒,这个时间段内,我没有一刻是不紧张的,直到我清清楚楚地看到“录用意向书”5个大字,悬着的心才放了下去。这次字节跳动的面试,给我的感触很深,意识到基础的重要性,这次字节共4面技术面+HR面,特分享一下这次的4面技术面真题,可能有些记不全了,但多少也能够给一些正在面试字节或计划面试字节的朋友提供帮助。字节跳动技术一面面问的都还比较基础,答得也还算顺利*
2019年11月23日
其他

Java:如何更优雅的处理空值?

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:lrwinxhttps://lrwinx.github.io/导语在笔者几年的开发经验中,经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不着头绪,它的出现很有可能和当前的业务逻辑并没有关系。但它会让你很头疼。有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务系统发生问题。此篇文章,我总结了几种关于空值的处理手法,希望对读者有帮助。业务中的空值场景存在一个UserSearchService用来提供用户查询的功能:public
2019年11月22日
其他

MySQL用得好好的,为啥非要转ES?

点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:京东技术京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况。我们把订单数据存储在MySQL中,但显然只通过DB来支撑大量的查询是不可取的。同时对于一些复杂的查询,MySQL支持得不够友好,所以订单中心系统使用了Elasticsearch来承载订单查询的主要压力。Elasticsearch作为一款功能强大的分布式搜索引擎,支持近实时的存储、搜索数据,在京东到家订单系统中发挥着巨大作用,目前订单中心ES集群存储数据量达到10亿个文档,日均查询量达到5亿。随着京东到家近几年业务的快速发展,订单中心ES架设方案也不断演进,发展至今ES集群架设是一套实时互备方案,很好地保障了ES集群读写的稳定性,下面就给大家介绍一下这个历程以及过程中遇到的一些坑。ES
2019年11月21日
其他

【原创】007|搭上SpringBoot拦截器源码分析专车

mapping;}如上可以看到获取并设置拦截器的代码,那么是如何获取拦截器的呢?获取拦截器:WebMvcConfigurationSupport#getInterceptorsprotected
2019年11月20日
其他

【原创】Java并发编程系列08 | synchronized锁优化

Java提供了关键字synchronized,方便快捷的解决的线程安全问题。那么synchronized真的就那么好用吗,就没有什么缺点或者需要优化的地方吗?本文就要介绍一下synchronized锁优化。自旋锁和适应自旋锁锁消除锁粗化偏向锁、轻量级锁、重量级锁锁的膨胀过程1.
2019年11月19日