自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 面试被问到如何优化掉多余的if/else?程序员小伙:直接开头return

前期迭代懒得优化,来一个需求,加一个if,久而久之,就串成了一座金字塔。当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。那,有什么方案可以优雅的优化掉这些多余的if/else?1. 提前return这是判断条件取反的做法,代码在逻辑表达上会更清晰,看下面代码:if ( condition ){ /* do something */} else { return(xxx);...

2020-04-29 11:43:25 349

原创 经历了7次面试,面试官给我的建议(附:java岗经验分享)

放年假对于程序员的我们应该是我们所期待的事,可去年的年假却让我让我慎得慌,感觉是回到了上学时的暑假。一放就是两个多月,这么长时间的闭门不出让瘦的像猴一样的我长了将近十公斤的膘,这个还是比较高兴的一件事 。可让我痛苦的是我突然的失去了工作,原因只有几点,我想具体是什么原因大家也应该能猜出来。时光飞逝 生活还的继续,在上个月都是不停的在面试,结果却都是回家等通知。在我感到失望迷茫的时候却意外接到了美...

2020-04-28 20:58:32 756

原创 4000字!教你如何提升String性能(源码+原理分析)

String 类型是我们使用最频繁的数据类型,没有之一。那么提高 String 的运行效率,无疑是提升程序性能的最佳手段。我们本文将从 String 的源码入手,一步步带你实现字符串优化的小目标。不但教你如何有效的使用字符串,还为你揭晓这背后的深层次原因。本文涉及的知识点,如下图所示:在看如何优化 String 之前,我们先来了解一下 String 的特性,毕竟知己知彼,才能百战不殆。字...

2020-04-28 16:54:47 112

转载 服务器内存被 Java 线程撑爆了,简单的 JVM 问题诊断流程

话说那天中午吃饭的时候,一个同事说:“那个项目组的人快气死我了,程序有问题,早晨在群里@了他们,到中午才回消息,然后竟然还说他们的程序没有问题,是我们这边调用的太频繁了。简直想笑。”一般来说,对接出现问题,如果不是错误太明显,我首先都会先怀疑是不是自己出了问题,以免到时候丢人。所以我说,吃完饭回去我帮你排查一下,看问题到底出在哪里。背景说明我们当前这个系统和很多的第三方系统做了集成,出问题的...

2020-04-26 16:23:12 468

转载 volatile原理技术知识整理

volatile是一种轻量且在有限的条件下线程安全技术,它保证修饰的变量的可见性和有序性,但非原子性。相对于synchronize高效,而常常跟synchronize配合使用。一. Java内存模型这里主要描述的线程,工作内存,主存的变量的读写关系:主存存放线程需要操作的变量,但线程并不直接操作主存。每个线程读取主存变量都是先拷贝一份到工作内存中,不同线程工作内存互不干扰。线程修改...

2020-04-24 15:56:14 121

转载 图解 TCP 重传、滑动窗口、流量控制、拥塞控制

相信大家都知道 TCP 是一个可靠传输的协议,那如何它是如何保证可靠的呢?为了实现可靠性传输,需要考虑很多事情,例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题,也就无从谈起可靠传输。那么,TCP 是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的。今天,将重点介绍 TCP 的重传机制、滑动窗口、流量控制、拥塞控制。提纲重传机制TCP 实...

2020-04-24 14:39:13 186

转载 线程池运用不当的一次线上事故

在高并发、异步化等场景,线程池的运用可以说无处不在。线程池从本质上来讲,即通过空间换取时间,因为线程的创建和销毁都是要消耗资源和时间的,对于大量使用线程的场景,使用池化管理可以延迟线程的销毁,大大提高单个线程的复用能力,进一步提升整体性能。今天遇到了一个比较典型的线上问题,刚好和线程池有关,另外涉及到死锁、jstack命令的使用、JDK不同线程池的适合场景等知识点,同时整个调查思路可以借鉴,特此...

2020-04-22 16:19:58 117

转载 来谈谈ThreadLocal 的原理吧!你需要了解一下

我们都知道当多线程访问共享可变数据时,涉及到线程间同步的问题,并不是所有时候,都要用到共享数据,所以就需要线程封闭出场了。数据都被封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的技术称为**「线程封闭」**。本文主要介绍线程封闭中的其中一种体现:ThreadLocal,将会介绍什么是 ThreadLocal;从 ThreadLocal 源码角度分析,最后介绍 Th...

2020-04-22 10:49:54 137

原创 推荐一个神器,MapStruct,你用过吗?

官网地址:http://mapstruct.org/MapStruct是一个代码生成器,简化了不同的Java Bean之间映射的处理,所以映射指的就是从一个实体变化成一个实体。例如我们在实际开发中,DAO层的实体和一些数据传输对象(DTO),大部分属性都是相同的,只有少部分的不同,通过mapStruct,可以让不同实体之间的转换变的简单。我们只需要按照约定的方式进行配置即可。MapStruc...

2020-04-21 17:05:03 778

转载 GitHub男人的天堂,你真的玩的转吗?超强超详细GitHub教程

摘要:常用命令:git init 新建一个空的仓库git status 查看状态git add . 添加文件git commit -m ‘注释’ 提交添加的文件并备注说明git remote add origin xxx连接远程仓库git push -u origin master 将本地仓库文件推送到远程仓库git log 查看变更日志git reset --hard 版本号前六...

2020-04-21 13:35:05 22719

原创 京东java研发岗二面:Tomcat是如何做到热加载和热部署的?

热部署就是在服务器运行时重新部署项目,热加载即在在运行时重新加载class,从而升级应用。通常情况下在开发环境中我们使用的是热加载,因为热加载的实现的方式在Web容器中启动一个后台线程,定期检测相关文件的变化,如果有变化就重新加载类,这个过程不会清空Session。而在生产环境我们一般应用的是热部署,热部署也是在Web应用后台线程定期检测,发现有变化就会重新加载整个Web应用,这种方式更加彻底会...

2020-04-21 11:32:06 196

转载 你需要搞懂的 HashMap实现原理:容量、负载因子、hash与定位

HashMap是常考点,而一般不问List的几个实现类(偏简单)。HashMap 的实例有两个参数影响其性能:初始容量和加载因子。基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。以下基于JDK1.8.0_102分析。JDK版本:oracle java 1.8.0_102内部存储HashMap的内部存储是一个数组(bucket),数组的元素N...

2020-04-21 10:54:58 544

原创 绝对硬货!基于Spring Boot的“课程设计”的设计与实现

这是一个集电影,音乐和书籍于一体的Java web应用Java 1.8框架:使用Spring Boot 集成Spring,Spring MVC,MyBatis(前期),Spring Data(后期)数据库:MySQL 5.6缓存:Redis 4.0版本控制:Maven 3.5页面解析框架:Thymeleaf负载均衡:Nginx - 端口80服务器:Tomcat 端口8080和818...

2020-04-21 10:04:10 3623

原创 一文搞懂 大数据批处理框架Spring Batch,所谓完美的解析方案是什么

如今微服务架构讨论的如火如荼。但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易。在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理。针对OLTP,业界有大量的开源框架、优秀的架构设计给予支撑;但批处理领域的框架确凤毛麟角。是时候和我们一起来了解下批处理的世界哪些优秀的框架和设计了,今天我将以Spring Batch为例,和大家一起探秘批处理的世界。初识批处理典型场景探...

2020-04-20 10:58:45 421

转载 new 字符串到底创建了几个对象! 你自己看吧!

我想所有 Java 程序员都曾被这个 new String 的问题困扰过,这是一道高频的 Java 面试题,但可惜的是网上众说纷纭,竟然找不到标准的答案。有人说创建了 1 个对象,也有人说创建了 2 个对象,还有人说可能创建了 1 个或 2 个对象,但谁都没有拿出干掉对方的证据,这就让我们这帮吃瓜群众们陷入了两难之中,不知道到底该信谁的。但是今天,老王就斗胆和大家聊聊这个话题,顺便再拿出点证据。...

2020-04-20 10:33:01 1246

转载 发现mybatis plus的牛逼,解决单表操作!

之前我也写过一篇关于mybatis plus的文章,但是版本的迭代之后,出现了很多不同之处,所以又写了这篇整合篇。my.oschina.net/u/3080373/b…mybatis plusMyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。以前我们使用mybatis的时候,我们会使用MyB...

2020-04-19 21:07:14 637

原创 注意了:Java 中4款常用的并发框架 你有了解么?

为什么要写这篇文章几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库。 但是,当深入实现细节时,我们想起了一位智者曾经说过的话:“细节决定成败”。最终我们意识到 NoSQL 不是解决所有问题的银弹,而 NoSQL vs RDMS 的答案是:“视情况而定”。类似地,去年RxJava 和 Spring Reactor 这样的并发...

2020-04-17 21:18:08 669

原创 如何理解运用模块与微服务?你真的懂了吗?

模块化还是微服务?我们的业务由一个大型应用转向微服务的时候,除了很好展示漂亮的PPT,提升KPI之外,实际操作时将整个业务切成微型服务似乎也不费吹灰之力。但这种方法真的是我们的最佳选择吗?确实,维护凌乱的单片应用程序有许多缺点。**但是有一个令人信服的替代方案经常被忽视:模块化应用程序开发。**在本文中,我们将探讨这种替代方案的含义,并展示它与构建微服务的关系。什么是微服务?微服务现在越来...

2020-04-17 21:09:00 1145

原创 微服务架构之幂等性问题及设计思想,你不得不知的一些幂等方案

前言小伙伴们有没有遇到过**生产环境经常出现过重复的数据?**在排查问题的时候,数据又是正常的。这个是何解呢?怎么会出现这种情况,而且还很难排查问题。今天我给大家分享一下这里的原因,以及解决方案。罪魁祸首产生重复数据或数据不一致(假定程序业务代码没问题),绝大部分就是发生了重复的请求,重复请求是指同一个请求因为某些原因被多次提交。导致这个情况会有几种场景:1)微服务场景,在我们传统应用架...

2020-04-17 13:43:50 228

原创 高并发流量的控制 你有思考过吗?

前言在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考。应对大流量的一些思路首先,我们来说一下什么是大流量?大流量,我们很可能会冒出:TPS(每秒事务量),QPS(每秒请求量),1W+,5W+,10W+,100W+…。其实并没有一个绝对的数字,如果这个量造成了系统的压力,影响了系统的性能,那么...

2020-04-16 16:59:20 94

原创 到今天才明白Class.forName 和 ClassLoader 到底有何区别?

前言最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。解释在java中Class.forName()和ClassLoader都可以对类进行加载。ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来获取描述此类的二进制...

2020-04-16 16:49:50 86

原创 这些软件架构演进史,你会一种应该就很牛了!

如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升空间。这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面。一、单体架构单体架构比较初级,典型的三级架构,前端(Web/手机端)+中间业务逻辑层+数据库层。这是一种典型的Java Spring mvc或者Python Django框架的应用。其架构图如下所示:单体架构单体架...

2020-04-16 14:15:31 204

原创 Java程序员年薪40W,他1年走了别人5年的路(技术提炼建议收藏)

介绍一下,这一次笔者笔下的这位大牛,lison,复旦大学工程硕士,专注技术十年,产品控、代码控,拥有丰富的项目经验,主持研发了多个成功上线的大型互联网项目。热爱互联网,热衷于各种web技术,精通JAVA、J2EE和前端开发,擅长互联网高并发、高可靠架构设计,有丰富的实战经验。愿意和他人分享自己对技术的理解和感悟,生动幽默。他有一句座右铭:不要用你战术上的勤奋掩盖你战略上的懒惰以下就是他在努力...

2020-04-14 17:54:28 113

原创 宅家30天,吃透这份Java高级工程师面试500题解析,成功定级阿里P7

宅家里一个月,“闭关修炼”的你是不是正在为金三银四跳槽季发愁呢?小编今天说的这富含的15个互联网大厂Java高级工程师核心面试问题整理!内容包括:1. Java 集合 22 题及答案解析2. JVM与调优 21 题及答案解析3. 并发编程 28 题及答案解析4. Spring 25 题及答案解析5. 23种设计模式解析 Spring Boot25题及答案解析6. 分布...

2020-04-14 15:02:18 1013

原创 裸辞闭关62天,啃下这些分布式技术笔记,有幸通过阿里Java岗P6面试

从去年互联网寒冬的裁员潮,到今年受疫情影响的春招消失。我有两个很多年的朋友,最初大家水平差不多,但几年的时间他们两个人走上了不同的道路。一位朋友每天写业务代码,做些增删改查的工作,疫情期间,公司停发了补贴,现在时刻担心被裁员。另外一个朋友,之前工作不太顺利,但上周拿到了一家大厂的高薪 Offer 。原因很简单,他为了进入大厂,对分布式技术进行了针对性的学习。大型互联网公司每天都要面对海量的业...

2020-04-13 16:47:48 523 1

转载 技术趋势:是什么让MVC悄然消失的?

投身IT江湖,就像打王者荣耀一样,好不容易练会了一个硬性,结果天美把它削弱了,你不得不再去练习一个。MVC这门技术伴随着我的成长,感情和Java一样深厚,但是,最近两年却不得不和MVC说再见了。是的,不是Struts没了,也不是SpringMVC没了,而是MVC这种架构模式被淘汰了。当时代抛弃你时,连一声再见都不会说。所以,看到这篇文章的各位程序员兄弟们,紧跟技术发展趋势,再牛逼一点的,能够提...

2020-04-13 14:35:41 282

转载 面试官:谈关于缓存穿透+击穿+雪崩,热点数据失效问题的解决方案

1.我们使用缓存时的业务流程大概为:当我们查询一条数据时,先去查询缓存,如果缓存有就直接返回,如果没有就去查询数据库,然后返回。这种情况下就可能出现下面的一些现象。2.缓存穿透2.1什么是缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流...

2020-04-13 14:20:34 136

空空如也

空空如也

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

TA关注的人

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