自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AOP如何实现及实现原理

相信大家或多或少的了解过AOP,都知道它是面向切面编程,在网上搜索可以找到很多的解释。这里我用一句话来总结:AOP是能够让我们在不影响原有功能的前提下,为软件横向扩展功能。那么横向扩展怎么理解呢,我们在WEB项目开发中,通常都遵守三层原则,包括控制层(Controller)->业务层(Service)->数据层(dao),那么从这个结构下来的为纵向,它具体的某一层就是我们所说的横向。我们的AOP就是可以作用于这某一个横向模块当中的所有方法。

2022-09-23 14:24:41 1906 1

原创 Java 14 令人期待的 5 大新特性,打包工具终于要来了

随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个主要特性作些概述。刚刚发布给开发人员使用不久,最新版本的JDK于2019年9月发布。但是很少有公司现在改用了,因为这个版本看起来无论如何都不会从甲骨文公司获得长期支持(LTS)。更不要说现在Java 14又已经出现了。随着新的Java发布生命周期的到来,新的Java版本预计将于2020年3月发布。

2022-09-23 14:21:58 431

原创 设计模式之代理模式

给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式包含如下角色:subject:抽象主题角色,是一个接口。该接口是对象和它的代理共用的接口;RealSubject:真实主题角色,是实现抽象主题接口的类;Proxy:代理角色,内部含有对真实对象RealSubject的引用,从而可以操作真实对象。代理对象提供与真实对象相同的接口,以便代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

2022-09-23 14:19:25 183

原创 Golang Mutex 原理解析

自旋对应于 CPU 的PAUSE指令,CPU 对该指令什么都不做,相当于空转。对程序而言相当于sleep了很小一段时间,大概 30个时钟周期。连续两次探测Locked位的间隔就是在执行这些PAUSE指令,它不同于sleep,不需要将协程转为睡眠态。

2022-09-23 14:15:17 399

原创 2020年面试复盘大全500道:Redis+ZK+Nginx+数据库+分布式+微服务

今天分享给大家的都是目前主流企业使用最高频的面试题库,也都是 Java 版本升级之后,重新整理归纳的最新答案,会让面试者少走很多不必要的弯路。同时每个专题都做到了详尽的面试解析文档,以确保每个阶段的读者都能看得懂,同时这部分面试文档也是可以免费的提供给有需要的同学们学习的,有需要的可以查看文末的获取方式!ThreadLocalRandom 是如何利用 ThreadLocal 的原理来解决 Random 的局限性?到底何时索引会失效?HTTP协议的交互流程,HTTP和HTTPS的差异,SSL的交互流程?

2022-09-23 14:12:27 69

原创 解析 Golang 协程池 gopool 设计与实现

Goroutine 是 Golang 提供的一种轻量级线程,我们通常称之为「协程」,相比较线程,创建一个协程的成本是很低的。所以你会经常看到 Golang 开发的应用出现上千个协程并发的场景。Goroutine 的优势:与线程相比,Goroutines 成本很低。它们的堆栈大小只有几 kb,堆栈可以根据应用程序的需要增长和缩小,context switch 也很快,而在线程的情况下,堆栈大小必须指定并固定。Goroutine 被多路复用到更少数量的 OS 线程。

2022-09-23 14:06:25 2296

原创 聊聊后端技术文档那些事

作为服务端开发,对于中小型的需求(比如只涉及单端

2022-09-23 13:47:06 281

原创 JDK8不是只有Lambda香,还有你更想不到的stream呢

除了collect之外,所有这些操作都会返回另一个流,这样它们就可以接成一条流水线,于是就可以看作对源的一个查询。最后,collect操作开始处理流水线,并返回结果(它和别的操作不一样,因为它返回的不是流,在这里是一个List)。数据处理操作流的数据处理功能支持类似于数据库的操作,以及函数式编程语 言中的常用操作,如filter、map、reduce、find、match、sort等。在小编写这段代码的时候,老宫当时看到就怼我了,你写的什么玩意,垃圾代码,竟然还有一个垃圾的变量。

2022-09-23 13:43:59 55

原创 Kitex 框架入门系列(1)

KiteX 是字节跳动框架组研发的下一代高性能、强可扩展性的 Go RPC 框架。目前已经在 Github 开源。作为字节跳动内部原有的 RPC 框架 Kite 的升级版,虽然开源时间不是很长,但其实从性能和扩展性上来说都已经在字节上万微服务的场景下做了充分的验证。近期花了一些时间简单看了看源码,被整体的框架设计和扩展性深深吸引。希望能够单独开一个系列,带大家一起熟悉Kitex的使用,通过源码了解其提供的能力,学习整体的设计。作为入门系列第一篇,今天我们先来看看如何上手。

2022-09-23 13:40:49 1554 1

原创 我服了,阿里挖过来的leader连垃圾回收都说不清楚

1. 如何确定垃圾?(1)引用计数法Java中,引用和对象是关联的,操作对象必须用引用进行。因此,对象如果没有任何与之相关联的引用,即他们的引用数为0,则该对象不太可能用到,即可回收。(2)可达性分析为了解决引用计数法存在的循环引用问题(有点类似死锁),Java使用可达性分析的方法。通过一系列的“GC roots”对象作为起点搜索。如果在 “GC roots”和一个对象之间没有可达路径,则该对象是不可达。另外,不可达对象不等价于回收对象,不可达对象变为可回收对象,需要至少两次标记。

2022-09-23 13:07:33 234

原创 Java设计模式:你知道大厂是怎么玩单列模式的吗?

在实际工作中,单例的使用还是比较常见的,在几种实现方式中,双重检测机制、静态内部类、枚举方式都是比较推荐。以上就是这篇文章的全部内容了,希望能对铁子们有帮助和收获。如果觉得文章有用,喜欢这篇文章的铁子们文章持续更新,也可以评论出你想看哪一块技术。创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见。

2022-09-22 13:47:42 74

原创 八股文系列:程序开发中的集合容器,你了解多少?

什么是集合集合框架:用于存储数据的容器。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。对外的接口、接口的实现和对集合运算的算法。接口: 表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现, 从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。实现: 集合接口的具体实现,是重用性很高的数据结构。算法: 在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个 接口被多个类实现时有不同的表现。

2022-09-22 13:40:39 56

原创 数据库连接池、线程池等管理的关键点,你知道吗?

连接池和线程池你并不陌生,不过你可能对它们的原理和使用方式上还存在困惑或者误区,我在面试时,就发现有很多的同学对线程池的基本使用方式都不了解。借用这节课,我想再次强调的重点是:池子的最大值和最小值的设置很重要,初期可以依据经验来设置,后面还是需要根据实际运行情况做调整。池子中的对象需要在使用之前预先初始化完成,这叫做池子的预热,比方说使用线程池时就需要预先初始化所有的核心线程。如果池子未经过预热可能会导致系统重启后产生比较多的慢请求。

2022-09-22 13:31:03 186

原创 阿里开源的分布式事务揭秘:Seata原理及流程剖析

分布式事务有各种实现方案,不过大体可分为两类,一种不需要关注事务分支与全局事务的交互过程。另一种是将逻辑拆分成三个部分准备、提交、回滚,分支事务加入全局事务。这两种在Seata里前者称为AT模式,后者称为MT模式。

2022-09-22 13:23:58 721

原创 金九银十:来自大厂面试官的灵魂拷问,你挡得住吗?

面试的时候最重要的是诚实。自己不会的就说不会,然后可以自己尝试着说出一些自己的思路,如果没有思路,也直说,人无完人,不可能面面俱到,因为你胡编的话,再深入问一下,你就露馅了。面试之前一定要做充分的准备。比如提前半个月或者一个月,就要开始看一些基础内容,对当前的工作做一个总结,找出自己的亮点。亮点很重要,一般面试的时候,有了亮点,面试的过程你就能掌握一定的主动权。就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验 Java 程序员的技术功底。

2022-09-22 10:42:48 63

原创 阿里架构面试官:聊聊分布式事务及系统架构,答出两种就算过

介绍分布式事务之前,先介绍什么是事务。简单的来说就是,一个大的操作由两个或者更多的小的操作共同完成。而这些小的操作又分布在不同的网络主机上。这些操作,要么全部成功执行,要么全部不执行。事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。拿转账的例子来说下什么是分布式事务。

2022-09-22 10:36:17 224

原创 阿里跳槽来的,连Spring容器与SpringMVC的容器的区别都不知道

首先在我们开发中会与到各种各样的容器,今天我们就说一下spring 容器与springmvc容器。Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多web应用采用。但是在实际应用中,初级开发者常常会因对Spring和SpringMVC的配置失当导致一些奇怪的异常现象,比如Controller的方法无法拦截、Bean被多次加载等问题,这种情况发生的根本原因在于开发者对Spring容器和SpringMVC容器之间的关系了解不够深入。

2022-09-22 10:28:23 196 1

原创 十年架构师一篇带你读懂 RabbitMQ——核心知识点详解

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

2022-09-22 10:21:04 274

原创 死锁详解:常见死锁案例、条件,如何避免出现死锁?

对应上面两处处理方式。感觉都不好,毕竟现网这种场景较少。而且这种死锁不是永久性的一直卡死在这,Oracle会检测到这种死锁的,并且检测到后会自己回滚,所以直接交给Oracle即可。

2022-09-22 10:02:26 233

原创 十年架构师告诉你怎样写好接口文档

●参数命名统一,下划线,驼峰…●类型定义明确,整形,长整型,浮点,对象,指针●是否需要枚举 required Enuma a●是否必填 optional int a //非必填●必要备注,说明这个字段是干啥的 required int a //不能叫a●是否需要默认值 required int a =0●如果是比较难懂的字段,贴上相关说明链接 required int a //字段说明http:heheda.com。

2022-09-21 13:45:19 1571

原创 蚂蚁金服十年架构师教你深入理解分布式锁

举个不太恰当的例子:假设共享的资源就是一个房子,里面有各种书,分布式系统就是要进屋看书的人,分布式锁就是保证这个房子只有一个门并且一次只有一个人可以进,而且门只有一把钥匙。然后许多人要去看书,可以,排队,第一个人拿着钥匙把门打开进屋看书并且把门锁上,然后第二个人没有钥匙,那就等着,等第一个出来,然后你在拿着钥匙进去,然后就是以此类推。

2022-09-21 13:27:45 47

原创 浅谈一下java设计模式——命令模式

将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。

2022-09-21 13:24:09 259

原创 828. 统计子串中的唯一字符 : 常规乘法原理运用题

这是 LeetCode 上的,难度为。Tag : 「模拟」、「数学」我们定义了一个函数countUniqueChars(s)来统计字符串s中的唯一字符,并返回唯一字符的个数。例如:s = "LEETCODE",则其中"L","T","C","O","D"都是唯一字符,因为它们只出现一次,所以countUniqueChars(s) = 5。本题将会给你一个字符串s,我们需要返回countUniqueChars(t)的总和,其中t是s的子字符串。输入用例保证返回值为32位整数。

2022-09-21 13:20:38 67

原创 Java工程师修炼之路—从Java小白到收获BAT等offer

在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易,华为等。一路走来也遇到很多困难,也踩了很多坑,同时我自己也探索了很多的学习方法,总结了很多心得体会,并且,我对校园招聘也做了一些研究和相应的准备。在今年的秋季招聘结束以后,我也决定把这些东西全部都写成文字,做成专题,以便分享给更多未来将要参加校招的同学。希望大家能从文章中得到帮助获得收获,也可以评论出你想看哪方面的技术。

2022-09-21 11:58:31 221

原创 Spring容器关闭执行销毁方法有几种?

这个问题让我很深刻,记得之前有一个面试就被问到有没有使用过。那他是什么?先来看下Spring容器的加载过程可以看到Bean从无到有主要是经历了四个步骤就是在成熟态的时候,在初始化生命周期执行回调方法主要是以接口或者注解的形式对外提供,注入到IOC容器中,完成对应的功能。

2022-09-21 10:15:43 712

原创 JAVA常用框架SQL注入审计

​ Wrapper提供了自定义SQL场景,与传统的mybatis一样使用$进行注解,但实际上ew已经做了预编译处理。同样的也支持注解&xml配置。注:需要mybatis-plus版本 >= 3.0.7 param 参数名要么叫ew,要么加上注解@Param(Constants.WRAPPER) 使用${ew.customSqlSegment} 不支持 Wrapper 内的entity生成where语句配置mapper@Mapper}​ 配置controller。

2022-09-21 10:11:45 1681

原创 面试必备:ThreadLocal详解

大家好,我是查漏补bug。无论是工作还是面试,我们都会跟打交道,今天就跟大家聊聊哈~ThreadLocal是什么?为什么要使用ThreadLocal一个ThreadLocal的使用案例ThreadLocal的原理为什么不直接用线程id作为ThreadLocalMap的key为什么会导致内存泄漏呢?是因为弱引用吗?Key为什么要设计成弱引用呢?强引用不行?InheritableThreadLocal保证父子线程间的共享数据ThreadLocal的应用场景和使用注意点。

2022-09-21 09:57:27 175 1

原创 读spring @Async的源码让我收获了什么?

此外,使用线程池,我们也需要一个类去实现Runnable或Callable接口,然后将该类的实例提交到线程池中,如果该类实现的是Runnable接口,则在run方法中执行我们自己的业务逻辑,并且没有返回值,也获取不到异常信息。spring的开发者们考虑到异步是一种思想,不应该拘泥于实现Runnable接口或Callable接口,在run方法或call方法中实现业务逻辑,它将线程的创建细节封装起来,只需少许的注解,就可以实现异步的功能,让我们把更多时间花在业务方法上。那么,它的底层是如何实现的呢?

2022-09-21 09:50:15 51

原创 spring事务的这10种坑,你稍不注意可能就会踩中!!!

我们可以看到事务方法add中,调用了事务方法doOtherThing,但是事务方法doOtherThing是在另外一个线程中调用的,这样会导致两个事务方法不在同一个线程中,获取到的数据库连接不一样,从而是两个不同的事务。这种情况使用了嵌套的内部事务,原本是希望调用roleService.doOtherThing方法时,如果出现了异常,只回滚doOtherThing方法里的内容,不回滚 userMapper.insertUser里的内容,即回滚保存点。所以,这种情况是直接回滚了整个事务,不只回滚单个保存点。

2022-09-21 09:48:34 175

空空如也

空空如也

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

TA关注的人

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