- 博客(22)
- 收藏
- 关注
原创 下载量破千万!美团大佬的Java性能调优实战手册,超详细
随着互联网的发展,高可靠、高并发以及降本增效,已成为各大公司面临的现实挑战,性能优化需求愈发迫切,大到分布式系统,小到代码块的算法优化,都已经成为你日常工作中必须要面对的事情。对于开发者而言,性能优化也从加分项变为一个热门技能,缺乏相关知识将很难在面试或工作中脱颖而出。性能优化有哪些困扰但是作为过来人,我发现很多学习者和实践者都在 Java 性能优化上面临着很多的困扰,比如:工作场景中遇到“性能优化”难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会发作,
2021-07-24 15:24:21 211
原创 春招结束丨5轮面试才拿到阿里offer,血泪面经分享
2月底开始面试,3+1(hr),3月3号结束,后来原部门没有hc了把我调到新部门加了两面,前前后后一共6面,从开始面试到拿意向书再到谈薪和最终offer一共经历了2个月时间。阿里一面:Java的多态 类的关系,组合和聚合的区别、哪个关系更紧密 说一下反射,及你在项目中的应用 线程池,线程池参数 线程间的通信 介绍ThreadLocal ConcurrentHashMap , JDK1.7和1 .8的不同实现 hash算法; 什么是时间复杂度 问项目二面(总监面):实验室研究方
2021-07-23 16:27:57 223
原创 拼搏百天!上月喜获阿里内推,交叉面把面试官面傻眼了
阿里内推一面:项目1,面试官让我描述一个自己印象最深的项目,手画设计图。2,针对项目中的技术进行发问,比如:架构设计、部署图、模块之间的通信等。3,因为我描述项目存储数据比较多,让我重新设计数据库的表,怎么设计后面都是针对项目技术的问题,一共二十多分钟阿里内推二面:1、问了冒泡排序,快排,和归并排序及优缺点和优化2,网络方面有osi七层,tcp/ip五层,分别有哪些协议及作用3,爬虫用的什么数据结构4、tcp的流量控制和拥塞控制5,mysql用的什么存储引擎,这个存储
2021-07-23 16:18:37 481 1
原创 美团面试官:MySQL主备、主从、读写分离你知道多少?
一、MySQL主备的基本原理在状态1中,客户端的读写都直接访问节点A,而节点B是A的备库,只是将A的更新都同步过来,到本地执行。这样可以保持节点B和A的数据是相同的。当需要切换的时候,就切成状态2。这时候客户端读写访问的都是节点B,而节点A是B的备库在状态1中,虽然节点B没有被直接访问,但是建议把备库节点B,设置成只读模式。有以下几个原因: 有时候一些运营类的查询语句会被放到备库上去查,设置为只读可以防止误操作 防止切换逻辑有bug 可以用readonly状态,来判断节
2021-07-22 21:23:35 298
原创 分布式定时任务框架选型,完美!
为什么我们需要定时任务我们先思考下面几个业务场景的解决方案: 支付系统每天凌晨1点跑批,进行一天清算,每月1号进行上个月清算 电商整点抢购,商品价格8点整开始优惠 12306购票系统,超过30分钟没有成功支付订单的,进行回收处理 商品成功发货后,需要向客户发送短信提醒 类似的业务场景非常多,我们怎么解决?很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多相似之处,可以相
2021-07-22 21:20:55 179
原创 面试官:说一下消息队列(MessageQueue)
消息队列(MessageQueue)是服务架构中常见的组件,可用于服务间解耦、事件广播、任务异步/延迟处理等,常用于分布式系统之间互相信息的传递。接下来对消息队列的实现如何满足几种消费场景进行简单阐述。一 . 消息队列相关概念1、生产者(Producer):负责产生消息;2、消费者(Consumer):负责消费消息;3、消息(Message):在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象;4、消息队列(Message Queue):一...
2021-07-22 21:19:22 228
原创 阿里面试官:在分布式环境下,如何实现session共享
先了解一下为什么会出现这种session共享的解决方案?随着互联网公司的项目在微服务和分布式的环境下进行的搭建,导致一个项目可能分别部署在几个甚至很多的服务器集群下,此时就会出现一个问题:当用户进行一个session会话的时候,比如一个用户去登录项目,一般的大公司的项目都是有Nginx进行反向代理的,这里简单列举一下Nginx常用的几种反向代理策略: 轮询策略, 权重比例策略, ip_hash策略, 还可以自定义的策略, 在Nginx的反向代理下,一
2021-07-22 21:17:07 123
转载 在序列化和反序列化的使用中,一定要避开这些坑!
1.序列化与反序列化的概念先说说序列化和反序列化的概念 序列化:将对象写入到IO流中 反序列化:从IO流中恢复对象 Serializable接口是一个标记接口,不用实现任何方法,标记当前类对象是可以序列化的,是给JVM看的。序列化机制允许将这些实现序列化接口的对象转化为字节序列,这些字节序列可以保证在磁盘上或者网络传输后恢复成原来的对象。序列化就是把对象存储在JVM以外的地方,序列化机制可以让对象脱离程序的运行而独立存在。序列化在业务代码也许用的不多,但是在框架层面用的是
2021-07-22 16:42:21 195
原创 Service 层和 Dao 都搞个接口,谁能告诉我为啥?
前几天刷头条又刷到了「Service层和Dao层真的有必要每个类都加上接口吗?」这个问题,之前简单回答了一波,给出的观点是「看情况」!现在结合我参与的项目以及阅读的一些项目源码来看。如果项目中使用了像Spring这样的依赖注入框架,那可以不用接口!先来说说为什么使用了依赖注入框架以后,可以不使用接口!不需要接口的理由我整理了支持Service层和Dao层需要加上接口的理由,总结下来就这么三个: 可以在尚未实现具体Service逻辑的情况下编写上层代码,如Controller对Servi
2021-07-21 16:19:02 252
原创 一看就会!一个注解搞定 Spring Boot 接口防刷
一,技术要点:Spring Boot的基本知识,Redis基本操作,首先是写一个注解类:importjava.lang.annotation.Retention;importjava.lang.annotation.Target;importstaticjava.lang.annotation.ElementType.METHOD;importstaticjava.lang.annotation.RetentionPolicy.RUNTIME;@Retention(RU...
2021-07-21 15:58:06 79
原创 教你用Java的方式创建一个自己的Tomcat容器
当我们开始接触到SpringBoot项目的时候,我们特别惊讶,为什么没有了tomcat服务器,web项目还能跑起来。为什么只用了一个main方法就能讲一个web项目跑起来。学习了这篇文章你就能明白了。1.发现内置Tomcat打开一个SpringBoot项目,我们发现,有tomcat的依赖接下来让我们把tomcat的依赖找到首先找到spring-boot-starter-web点进去之后我们看到他用的是2.1.0版本,我们继续点击去果然在里面找到tomcat的依赖,我们继续
2021-07-20 21:42:47 178
原创 聊一聊关于加解密、加签验签的那些事
面对MD5、SHA、DES、AES、RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公钥加密、私钥解密、私钥加签、公钥验签。这些都什么鬼?或许在你日常工作没有听说过这些名词,但是一旦你要设计一个对外访问的接口,或者安全性要求高的系统,那么必然会接触到这些名词。所以加解密、加签验签对于一个合格的程序员来说是必须要掌握的一个概念。那么加解密相关的密码学真的离我们很遥远吗?其实生活中有很多常见的场景其实都用到了密码学的相关知识,我们不要把它想得太难,例如在《睡在我上铺的兄弟》这一段中作弊绕口令中,小
2021-07-20 21:41:15 332
原创 美团面试:线程切换的流程是怎么样的?
进程切换分两步:1.切换页目录以使用新的地址空间2.切换内核栈和硬件上下文对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。切换的性能消耗:1、线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系统内核来完成的。内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。2、另外一个隐藏的损耗是上下文的切换会扰乱处理器的
2021-07-20 21:34:56 171
原创 一学就会!SpringBoot 使用 Caffeine 本地缓存
环境配置: JDK 版本:1.8 Caffeine 版本:2.8.0 SpringBoot 版本:2.2.2.RELEASE 参考地址: Spring Boot缓存实战 Caffeine Caffeine Cache-高性能Java本地缓存组件 博文示例项目 Github 地址:https://github.com/my-dlq/blog-example/tree/master/springboot/springboot-caffeine-cache-
2021-07-20 21:33:31 485
原创 怎么回事?升级了下 IDEA 后 Lombok 失效了...
今天到工作室比较晚,在电脑前吃着早饭,看到提示IDEA提示升级,寻思已经有好久没有升过级了。一样等着,就升级下吧。升级完毕重启之后,突然发现好多错误,原来的应用也没法启动了。仔细一看报错信息,是由于Lombok相关的注解似乎都没有生效。比如:用到@Slf4j的类里,会有类似这样的报错:java:找不到符号符号:变量log位置:类com.didispace.UserServiceIDEA还提示,现在使用的编译器不支持lombokjava:Youaren'...
2021-07-20 21:31:43 480 1
原创 深入浅出 SpringMVC 中返回对象的循环引用问题
问题发现今天这个话题还是比较轻松的,可能很多朋友也都遇到过这个问题。@RestController、@ResponseBody 等注解是我们在写 Web 应用时打交道最多的注解了,我们经常有这样的需求:返回一个对象给前端,SpringMVC 帮助我们序列化成 JSON 对象。而今天我要分享的话题也不是什么高深的内容,那就是返回对象中存在循环引用时问题的探讨。该问题非常简单容易复现,直接上代码。准备两个存在循环引用的对象:@DatapublicclassPerson{p...
2021-07-20 20:41:33 199
原创 详解:批处理框架_Spring Batch
spring batch简介spring batch是spring提供的一个数据处理框架。企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作。这些业务运营包括: 无需用户交互即可最有效地处理大量信息的自动化,复杂处理。这些操作通常包括基于时间的事件(例如月末计算,通知或通信)。 在非常大的数据集中重复处理复杂业务规则的定期应用(例如,保险利益确定或费率调整)。 集成从内部和外部系统接收的信息,这些信息通常需要以事务方式格式化,验证和处理到记录系统中。批处理用于每
2021-07-17 17:23:14 694
原创 ELK处理 SpringBoot 日志,真实太妙了!
在排查线上异常的过程中,查询日志总是必不可缺的一部分。现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难。工欲善其事,必先利其器。如果此时有一个统一的实时日志分析平台,那可谓是雪中送碳,必定能够提高我们排查线上问题的效率。本文带您了解一下开源的实时日志分析平台 ELK 的搭建及使用。 ELK 简介ELK 是一个开源的实时日志分析平台,它主要由 Elasticsearch、Logstash 和 Kiabana 三部分组成。LogstashLogstash 主要用..
2021-07-16 21:36:57 400
原创 面试:TCP协议经典十五连问!
前言TCP协议是大厂面试必问的知识点。整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀1. 讲下TCP三次握手流程开始客户端和服务器都处于CLOSED状态,然后服务端开始监听某个端口,进入LISTEN状态 第一次握手(SYN=1, seq=x),发送完毕后,客户端进入 SYN_SEND 状态 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1), 发送完毕后,服务器端进入 SYN_RCVD 状态。 第三次握手(ACK.
2021-07-16 20:43:11 208 1
原创 GitHub星标63K霸榜半月!阿里大牛的微服务分布式架构笔记已上线
分布式架构与微服务作为当今IT界的关键技术,也是每一位合格架构师必须掌握的核心技术。下面小编就来分享一份GitHub星标63K霸榜半月!阿里大牛手写的微服务分布式架构笔记—从传统分布式架构迁移到基于容器技术的微服务架构为主线,全面、透彻地介绍了与分布式架构及微服务相关的知识和技术。总览:篇幅限制,这里就不一一截图展示了。需要获取完整版微服务分布式架构笔记的小伙伴:点赞+收藏后,点此【传送门】即可免费获取到笔记内容:
2021-07-15 20:30:59 136
原创 服务发布或重启,发生抖动怎么办?
一、问题描述在发布或重启某线上某服务时(jetty8作为服务器),常常发现有些机器的load会飙到非常高(高达70),并持续较长一段时间(5分钟)后回落(图1),与此同时响应时间曲线(图2)也与load曲线一致。注:load飙高的初始时刻是应用服务端口打开,流量打入时:图1 发布时候load飙高图2 发布时候响应时间飙高二、问题排查方法发布时对资源使用情况进行监控。1)通过top -H -p 查找cpu使用率较高的线程,发现2129和2130这两个线程cpu使用较高。图3 查
2021-07-15 17:05:40 92
原创 SQL查询是从Select开始的吗?
好吧,显然很多SQL查询都是从SELECT开始的(实际上本文只是关注SELECT查询,而不是INSERT或其它别的什么)。但是!昨天我正在做窗口函数的解释说明,并且我发现自己在谷歌上搜索“你能根据窗口函数的结果进行过滤吗”。比如 — 你能在WHERE、HAVING或者其它地方过滤窗口函数的结果吗?最后我得出的结论是:“窗口函数必须在WHERE和GROUP BY之后运行,所以你做不到”。但这让我想到了一个更大的问题 — SQL查询的实际运行顺序是什么?这是我凭直觉就知道的事情(“我肯定知道!我已经
2021-07-15 17:03:48 107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人