自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 实战讲解MySQL执行计划,面试官当场“要了我”

explain或者desc获取MySQL如何执行select语句的信息。结果包含很多列1 各列字段说明1.1 idSELECT标识符。这是查询中SELECT的序列号,表示查询中执行select子句或者操作表的顺序。如果该行引用其他行的并集结果,则该值可为NULL。id号分为三种情况:id相同,那么执行顺序从上到下explain se1ect * from emp e join dept d on e.deptno = d.deptnojoin salgrade sg on e.sa1 .

2020-08-31 10:41:01 143

原创 记一次订单号重复的事故,网友评论表中不加唯一索引吗?

去年年底的时候,我们线上出了一次事故,这个事故的表象是这样的:系统出现了两个一模一样的订单号,订单的内容却不是不一样的,而且系统在按照 订单号查询的时候一直抛错,也没法正常回调,而且事情发生的不止一次,所以 这次系统升级一定要解决掉。经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题, 所以趁着这次问题我好好的理了一下我同事写的代码。这里简要展示下当时的代码: /** * OD单号生成 * 订单号生成规则:OD + yyMMddHHmmssSSS +

2020-08-31 09:54:36 320

原创 遭MQ连连干翻后的醒悟!含恨码出5本MQ学习手册助力秋招之旅

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。同时现在的很多互联网公司对Java后端开发人员的技术要求也越来越高,消息队列也成了面试的热点话题,甚至也有小伙伴被接受过灵魂拷问!(消息队列不太行,大厂亿万级的业务要你去真的搬砖么?)消息为什么会出现重复?如何保证消息不被重复消费啊?如何保证消费的时候是幂等的啊?如何保证消息的可靠性传输啊?要是消息丢失了怎么办啊?如何保证消息的顺序性?

2020-08-29 14:42:16 172

原创 面试必备:HashMap(JDK1.8)原理以及源码分析

对于HashMap想必大家都不陌生,无论是平时code还是面试都经常和它打交道。今天我们通过源码的层面来分析一下它的实现原理,注意本文基于的是JDK1.8。问题是从哪边开始聊起呢?我觉得不妨先从一段熟悉的代码开始。Map<Integer, String> map = new HashMap<Integer, String>();然后我们会迫不及待点开HashMap这个类,发现里面有大量的属性和方法,一脸懵逼。那就直接点开put方法?点了之后发现下面这段代码。final V

2020-08-29 14:31:25 387

原创 不可思议,Spring JdbcTemplate写增删改查竟然如此简单??

本来这篇文章要写spring事务的,但是事务中大部分案例会用到JdbcTemplate相关的功能,所以先把JdbcTemplate拿出来说一下。什么是JdbcTemplate?大家来回顾一下,java中操作db最原始的方式就是纯jdbc了,是不是每次操作db都需要加载数据库驱动、获取连接、获取PreparedStatement、执行sql、关闭PreparedStatement、关闭连接等等,操作还是比较繁琐的,spring中提供了一个模块,对jdbc操作进行了封装,使其更简单,就是本文要讲的JdbcT

2020-08-28 14:52:23 393

原创 学长秋招仅凭精通数据结构和算法,拿下七个offer,进了字节跳动

去年,学校有位学长参加秋招的时候,拿到了字节跳动、快手、阿里、美团……等等 7 家大厂的 Offer,在此之前,学长一直“默默无闻”,基本可以说是在秋招一战成名,成为众多学弟学妹羡慕的对象。今年,伴随着疫情的影响,就业形势并不乐观,于是,秋招的准备就变得尤为重要,毕竟毕业之后的第一家公司,决定了以后工作的起点。为此,学校的老师特意邀请了这位学长来做了分享,因为他最后选择了字节跳动,就以字节跳动为例,分享了一些经验:字节跳动并不会特别关心候选人使用什么编程语言,逻辑很简单,你 Java 特别厉害,那

2020-08-27 15:16:29 258

原创 微服务--webapi实现,脱离iis,脱离tomcat

前言微服务,顾名思义就是微小的单一的服务程序,单一流程,单一发布,开发和部署都可独立;这是我的理解;但基于web的服务,不管是webservice还是webapi等类似的服务都需要基于iis或者tomcat,本文介绍重点绕过iis或tomc部署基于http服务明文程序;所谓明文程序就是源码发布;当然你也可以不必是源码发布,这个可以个人需求;序言请不要问我为什么不直接使用web现成的架构,进行开发部署,第一:我的项目有这样的需求;原本就是一个服务程序,提供socket tcp协议数据服务;并且

2020-08-27 14:31:07 748

原创 强悍!阿里技术专家私藏的Java入门到架构成长资源仓,太猛了

现在面试大部分候选人在工作 3 年的时候基本都会遇上一道难过的坎。**为啥这么说呢?**因为工作一段时间之后,大部分工程师都已经完成了最原始的基础技能积累,大家的技术水平差距集中在语言、框架、工具的使用熟练度上。**而这个差异不会很大,就算大,也很容易追赶。但如果一个工程师一直停留在业务开发,一直沉浸于工具的使用熟练度,那他自然就会遇到能力瓶颈。**这个瓶颈就是前面说的那道坎,跳过去了,你就发现了一片新天地,可以在下一个区间里继续生长。跳不过去,就可能不停地在原地打转。最近意外收获了到一份Alibaba一

2020-08-27 13:50:37 201

原创 从 Spring 及 Mybatis 框架源码中学习设计模式

设计模式是解决问题的方案,从大神的代码中学习对设计模式的使用,可以有效提升个人编码及设计代码的能力。本系列博文用于总结阅读过的框架源码(Spring 系列、Mybatis)及 JDK 源码中 所使用过的设计模式,并结合个人工作经验,重新理解设计模式。本篇博文主要看一下行为型的几个设计模式,即:策略模式、模板方法模式、迭代器模式、观察者模式及责任链模式。策略模式去年看了蛮多源码,发现框架的开发者在实际使用设计模式时,大都会根据实际情况使用其变体,老老实实按照书上的类图及定义去设计代码的比较少。不过我们依

2020-08-25 10:28:29 181

原创 7000字长文带你深入了解IOC启动原理

1. IOC概述1.1 是什么?两个概念:控制反转,依赖注入**来看一下传统的干活方式:**在对象单一职责原则的基础上,一个对象很少有不依赖其他对象而完成自己的工作,所以这个时候就会出现对象之间的依赖。而体现在我们的开发中,就是需要什么对象的时候,就创建什么对象,此时对象创建的控制权在我们自己手里。当对象创建的太多的时候,就会出现一个对象更改,就得更改所有依赖它的对象,耦合性大。自主性体现的同时也出现了对象耦合严重的情况。这个时候,我们就会思考,能不能我们在用的时候直接拿到这个对象去用,而将创建对

2020-08-25 10:03:59 211

原创 【趣味设计模式系列】之【代理模式3--Cglib动态代理源码解析】

1. 图解上图主要描述了Cglib动态代理的主要执行过程,下面做详细分析,以下源码使用的Cglib版本为3.2.12。2. Enhancer源码分析public Object create() { // 判断是否需要创建对象,false表示需要创建对象 classOnly = false; // 使用的是无参构造函数,参数为null argumentTypes = null; // 创建动态代理class的方法 return createHelper(

2020-08-24 22:09:23 194

转载 ​JDK1.8 新特性 :还在重复写空指针检查代码?赶紧使用 Optional 吧

1、前言作为一名Java程序员,无论是初入茅庐的菜鸟,还是久经江湖的高手,曾经肯定遭遇过各种各样的异常错误。在国外的一篇文章中,就统计了关于异常类型的排行榜,如下图:是的,你没有看错,NullPointerException位居榜首。Null Reference的发明者Charles Antony Richard Hoare说过:“我称之为我的十亿美元错误。这是1965年发明空引用的结果……这导致了无数的错误,漏洞和系统崩溃,在最近40年中可能造成十亿美元的痛苦和破坏。”这看起来有些夸张,但毫无.

2020-08-21 16:31:26 153

原创 MongoDB最新4.2.7版本三分片集群修改IP实操演练

背景重新组网,需要对现有MongoDB分片集群服务器的IP进行更改,因此也需要对MongoDB分片集群的IP也进行相应的更新,而MongoDB分片集群的IP修改不能单纯的通过配置来进行,需要一番折腾后才能正常更新,这里对整个MongoDB集群的IP修改过程做下记录,希望对有同样需求的小伙伴有所帮助。原有集群配置如下这里的端口分配如下所示:IP修改对应关系如下:更改IP步骤升级过程是先升级 Config 服务,再分别升级三个 Shard 配置,最后修改

2020-08-21 15:16:28 385

原创 我通过了某独角兽公司的魔鬼五面:业务线组长+架构师+技术VP+CTO

今年因为疫情的影响,部分公司经营上无法正常维持的,或考虑到未来生存成本问题,默默裁员的企业不在少数,找工作对比往年来看形势不容乐观。我的一些朋友们也在近期换了工作,他们当中有刚毕业没干工作多长时间的,也有在职场上工作五年以上的,我跟他们交流后,给我的感受就是,一个字「难」,为什么呢?因为今年的情况特殊,僧多肉少,同一个岗位竞争必然是激烈的,所以你的面试表现不够优秀,的确就很难入面试官的法眼了应聘的是Java后端开发岗位,具体招聘要求如下所示:第一面技术:业务线组长1、自我介绍(个人介绍的时间长

2020-08-20 16:54:56 490

原创 如何准备一场成功的 SQL 面试?

SQL 是用于数据分析和数据处理的最重要的编程语言之一,因此与数据科学相关的工作(例如数据分析师、数据科学家和数据工程师)在面试时总会问到关于 SQL 的问题。SQL 面试问题旨在评估应聘者的技术和解决问题的能力。因此对于应聘者来说,关键在于不仅要根据样本数据编写出正确的查询,而且还要像对待现实数据集一样考虑各种场景和边缘情况。我以前也设计过针对数据科学候选人的 SQL 面试问题,自己也在大型技术公司和初创公司中主持过许多次 SQL 面试。在这篇文章中,我将介绍 SQL 面试问题中常见的模式,并提供一些在

2020-08-20 16:31:14 347

转载 一个@Transaction哪里来这么多坑?

目录前言事务失效数据库层面业务代码层面总结事务回滚相关问题读写分离跟事务结合使用时的问题总结前言在之前的文章中已经对Spring中的事务做了详细的分析了,这篇文章我们来聊一聊平常工作时使用事务可能出现的一些问题(本文主要针对使用@Transactional进行事务管理的方式进行讨论)以及对应的解决方案事务失效事务回滚相关问题读写分离跟事务结合使用时的问题事务失效事务失效我们一般要从两个方面排查问题数据库层面数据库层面,数据库使用的存储引擎是否支持事务?默认情况下My.

2020-08-20 16:00:29 119

原创 阿里美团九年,这位Java大佬手码三大中间件学习手册,看完跪拜了

消息队列中间件的使用并不复杂,但如果你对消息队列不熟悉,很难构建出健壮、稳定并且高性能的企业级系统,你会面临很多实际问题:如何选择最适合系统的消息队列产品?如何保证消息不重复、不丢失?如何做到水平扩展?如果你掌握了消息队列的底层技术,无论使用哪种消息队列产品,你都可以从原理层面来分析问题,再简单看一下它的API和相关配置项,就能很快知道该如何配置消息队列,写出高性能并且可靠的程序。然而也有很多小伙伴对于学习中间件技术还是缺少一些学习资源,所以今天我们要分享的内容,实际上就是阿里P8的十年开发经

2020-08-20 15:53:52 266 1

原创 多图详解!10大高性能开发核心技术

程序员经常要面临的一个问题就是:如何提高程序性能?这篇文章,我们循序渐进,从内存、磁盘I/O、网络I/O、CPU、缓存、架构、算法等多层次递进,串联起高性能开发十大必须掌握的核心技术。- I/O优化:零拷贝技术- I/O优化:多路复用技术- 线程池技术- 无锁编程技术- 进程间通信技术- RPC && 序列化技术- 数据库索引技术- 缓存技术 && 布隆过滤器- 全文搜索技术- 负载均衡技术准备好了吗,坐稳了,发车!首先,我们从最简单的模型开始

2020-08-19 14:51:00 529

原创 网友:互联网Java后端不会GC调优很丢脸吗?看完后我要去学习了

很多人都以为 Java 调优是千万级甚至亿万级的大流量、大项目才要用的上,其他一般场景根本用不到。无怪乎校招的时候,很多同学都只把调优技巧和方法当做造火箭的部分。其实不然。前天圈里就因为这个问题,评论炸开了锅。事情是这样的,一位网友问道:**Java后台不懂GC调优很丢脸吗?**本来没什么。但一位微软的朋友回复亮了:结果底下回复炸开了,甚至有人怀疑:怎么去的微软?相信不少人被问到过性能调优问题的场景——项目的并发量级是多少?是否有性能问题诊断与优化的生产经验?基于并发量需求会从哪些维度考虑

2020-08-19 14:01:48 253

原创 我为什么放弃Spring Boot 中的 RestTemplate?选择 Retrofit !

推荐:一套SpringCloud电商项目,拿来即用(附详细教程和文档)!作者: 六点半起床 juejin.im/post/6854573211426750472大家都知道okhttp是一款由square公司开源的java版本http客户端工具。实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http请求。如果你的项目中还在直接使用RestTemplate或者okhttp,或者基于它们封装的HttpUtils,那么你可以尝试使用Retrofi

2020-08-14 10:38:52 144

原创 后端不哭!最新优化性能经验分享来啦

今天谈下业务系统性能问题分析诊断和性能优化方面的内容。这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。系统性能问题分析流程我们首先来分析下如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题,那么实际上潜在的场景主要来自于以下几个方面。业务出现大并发的访问,导致出现性能瓶颈上线后的系统数据库数据日积月累,数据量增加后出现性能瓶颈其它关键环境改变,比如我们常说的网络带宽影响正是由于这个原因,当我们发现性能问题的时候,首先就需要判断是.

2020-08-13 14:05:06 102

原创 Java加分项之并发编程:进程+线程+锁+同步+异步+缓存+分治+面试题

并发编程高级面试专题解析问题一: Synchronized 用过吗, 其原理是什么?问题二: 你刚才提到获取对象的锁, 这个“ 锁” 到底是什么? 如何确定对象的锁?问题三: JVM 对 Java 的原生所做了哪些优化?问题四: 为什么说 Synchronized 是非公平锁?问题五: 什么是锁消除和锁粗化?问题六: 为什么说Synchronized是一个悲观锁? 乐观锁的实现原理又是什么? 什么是 CAS问题七: 乐观锁一定就是好的吗?问题八: 跟Synchronized相比, 可重入锁R

2020-08-13 10:06:04 155

原创 功能模块提测前注意这几件事,再也不怕被测试diss了!

概述在项目管理流程中,有几个关键阶段:需求阶段、开发阶段、测试阶段、上线阶段其中的需求阶段和开发阶段是最为重要的,一个是设计,定义这个功能如何运作,一个是执行与实现,这两个阶段把控好了,往下走就会顺利很多。下面重点讲一下开发阶段中的提测步骤,在提测前应该准备什么东西,以保证提测的质量。首先关于提测这个动作,我自己是这么理解的:提测了,就说明开发人员认为功能就长这样了,已经完全按照产品PRD完整的实现了,是个严谨、负责、认真的动作。理论上,研发人员一旦提测,就可以开始处理其他需求任务了的。

2020-08-13 10:01:28 349

原创 秒杀商品超卖事故:Redis分布式锁请慎用!

前言基于Redis使用分布式锁在当今已经不是什么新鲜事了。本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案。背景:我们项目中的抢购订单采用的是分布式锁来解决的。有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了!要知道,这个地球上飞天茅台的稀缺性啊!!!事故定为P0级重大事故…只能坦然接受。整个项目组被扣绩效了~~事故发生后,CTO指名点姓让我带头冲锋来处理,好吧,冲~事故现场经过一番了解后,得知这个抢购活动接口以前从来没有出现过这种情况,但是这次为什么

2020-08-11 10:10:18 336 1

原创 头条首推!美团内部都在用的Java后端面试笔记,囊括90%的主流技术

昨天跟一位大厂的朋友聊到今年的面试。听下来有两个感受,一个是面邀人数不多,疫情影响,不难理解。再一个就有点不乐观:很多面试者准备明显不足。不少候选人能力其实不差,进入团队干活后达到期望不难,但由于没准备或不会表达,就是无法通过面试。项考核工作 2 年以上经验的技术人士,他希望候选人不是只停留在“会干活” 的层面,还要更注重考察其“解决问题”的能力。如果平时只忙于业务,不注重积累和准备,薪资会十分吃亏。那么,到底该如何准备高级开发、架构师级别的面试呢?**为了帮助有需要的朋友在金九银十面试,**最近整理了

2020-08-11 09:38:06 539

原创 如何最大程度防止人为误操作MySQL数据库?这次我懂了!!

写在前面今天,一位哥们打电话来问我说误操作了他们公司数据库中的数据,如何恢复。他原本的想法是登录数据库update一个记录,结果忘了加where条件,于是悲剧发生了。今天,我们不讲如何恢复误操作的数据(后面专门讲如何恢复误删除的数据),我们讲讲如何从源头上避免这样的问题,这才是避免类似问题的根本措施。在mysql命令加上选项-U后,当发出没有WHERE或LIMIT关键字的UPDATE或DELETE时,MySQL程序就会拒绝执行。那么,我们基于MySQL提供的这项设置,就可以轻松实现如何最大程度防止人为误

2020-08-10 10:28:15 694

原创 自定义Spring bean容器了解一下?实战及原理解读

开发中经常有这样的场景:根据某个类型标识走不同的业务逻辑,通常我们会使用if(type.equals(xxxxx)) 或者 switch语句来进行逻辑处理。这样做当然是没什么问题的。当业务逻辑变得越来越复杂,类型标识增多之后,难免会出现if判断增加,或者switch case分支变多,这样的代码往往会过于冗长,代码重复性较大,或者说逼格不够高。本文介绍一种基于自定义Bean容器的开发方式,消除代码中的判断分支,提升代码可读性。我们通过一个demo来看如何实现这种编码方式。定义接口首先定义一个接

2020-08-08 09:22:15 190

原创 在kubernetes中用alluxio加速spark数据访问(二)

简介: 本文档主要说明怎样在k8s上用alluxio加速spark的数据访问。文档将演示结合spark、alluxio和k8s完成一个对文件单词进行计数的任务。在实验中,我们将开启alluxio的short-circuit的功能,验证spark executor与alluxio worker之间的通信是否通过domain socket方式完成。相关文章:在kubernetes中用alluxio加速spark数据访问(一)1.背景信息1.1 alluxioAlluxio是一个开源的基于

2020-08-07 10:12:05 296

原创 在Kubernetes中用Alluxio加速Spark数据访问(一)

简介: 本文档主要说明怎样在k8s上用alluxio加速spark的数据访问。文档将演示结合spark、alluxio和k8s完成一个对文件单词进行计数的任务。在实验中,我们将关闭alluxio的short-circuit的功能,验证spark executor与alluxio worker之间的通信是否通过网络栈完成。相关文章:在Kubernetes中用Alluxio加速Spark数据访问(二)1.背景信息1.1 alluxioAlluxio是一个开源的基于内存的分布式存储系统,适

2020-08-07 10:07:33 254 1

原创 Mybatis3.3.x:SqlSession与SqlSessionFactory到底是什么关系?

1. SqlSession和SqlSessionFactory的接口定义SqlSession:public interface SqlSession extends Closeable { <T> T selectOne(String var1); <T> T selectOne(String var1, Object var2); <E> List<E> selectList(String var1); <

2020-08-06 10:11:18 300

原创 耗时半年,我成功“逆袭”,拿下美团offer(刷面试题+读源码+项目准备)

写在开头的闲话是去美团送外卖了?有配电瓶车吗?答:亲,有配的哦,开起来贼顺滑。啊呸,说啥了,咱进的是正儿八经的技术部门。这一段,是和老同学之间的玩笑话。是的,对于我进入美团工作一事,身边的人都很惊讶,我自己也是不可思议了好一阵子,毕竟背景不强、学历不高、技术不行,我这样的人也能进入大厂?是的,这件事也正告诉我,付出是有回报的,这个社会永远都不会辜负努力的人。这一个记录贴,也希望能够给你一些启发,燃起你现在的斗志!以下内容包含了Java岗面试题总结、源码笔记、实战文档、学习文档等资料,免费分享,需

2020-08-05 17:15:46 218

原创 BATJTMD 面试必问的 MySQL ,你竟然一个都不会?

正文二狗:不多BB,先怼几道常问的大题目。MySQL 的事务隔离级别有哪些?分别用于解决什么问题?主要用于解决脏度、不可重复读、幻读。脏读:一个事务读取到另一个事务还未提交的数据。不可重复读:在一个事务中多次读取同一个数据时,结果出现不一致。幻读:在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。不可重复读注重于数据的修改,而幻读注重于数据的插入。二狗:MySQL 的可重复读怎么实现的?使用 MVCC 实现的,即 Mutil-Version Concurrency

2020-08-05 09:47:00 275

原创 记一次阿里面试题:都有哪些进程间通信方式?麻烦你不要再背了

1 管道学习软件工程规范的时候,我们知道瀑布模型,在整个项目开发过程分为多个阶段,上一阶段的输出作为下一阶段的输入。各个阶段的具体内容如下图所示最初我们在学习Linux基本命令使用的时候,我们经常通过多个命令的组合来完成我们的需求。比如说我们想知道如何查看进程或者端口是否在使用,会使用下面的这条命令这里的"|“实际上就是管道的意思。”|“前面部分作为”|“后面的输入,很明显是单向的传输,这样的管道我们叫做"匿名管道”,自行创建和销毁。既然有匿名管道,应该就有带名字的管道"命名管道"。如果你想双

2020-08-03 10:22:24 111

空空如也

空空如也

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

TA关注的人

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