自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多线程(【多线程案例】单例模式+阻塞式队列+定时器+线程池)

(1)降低资源消耗:通过重复利用已创建的线程来执行任务,降低线程创建和消耗造成的消耗(2)提高响应速度:因为省去了创建线程这一步,所以当拿到任务时,可以立即开始执行(3)提高线程的可管理性:我们可以自己加入新的功能,比如说定时、延时来执行某些线程,也可以监控线程,控制最大并发线程数等功能。

2022-09-25 20:43:45 576

原创 Java秋招必知必会八股文210题,看完offer拿到手软

疫情当前,假期我也是没敢出去浪,家里蹲又属实无聊,所以我花了几天时间整理了一下今年各大厂出现频率比较高的一些Java面试题,希望对跳槽和找工作的朋友有一些参考价值。说句题外话,其实只要自己实力足够,完全没必要去赶什么所谓的金三银四,随时都有公司抢着要。那废话就不多说了,我们直接发车,坐稳扶好!

2022-09-25 15:54:02 437

原创 聊聊并发编程的10个坑

对于从事后端开发的同学来说,并发编程肯定再熟悉不过了。说实话,在java中并发编程是一大难点,至少我是这么认为的。不光理解起来比较费劲,使用起来更容易踩坑。不信,让继续往下面看。今天重点跟大家一起聊聊并发编程的10个坑,希望对你有帮助。

2022-09-25 15:38:35 319

原创 如何保证数据库和缓存双写一致性?

数据库和缓存(比如:redis)双写数据一致性问题,是一个跟开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。我很负责的告诉大家,该问题无论在面试,还是工作中遇到的概率非常大,所以非常有必要跟大家一起探讨一下。今天这篇文章我会从浅入深,跟大家一起聊聊,数据库和缓存双写数据一致性问题常见的解决方案,这些方案中可能存在的坑,以及最优方案是什么。

2022-09-25 13:48:11 279

原创 【微服务】Java模拟实现dubbo框架

在对dubbo有了较为深入的使用和理解后,来尝试从dubbo框架的角度重新认识下它,对照着dubbo官方的这张图进行反复的理解后,我们可以从已有掌握的技术出发,来尝试编写一个简单的dubbo实现。使用自定义的Servlet ,可以让程序得到一个的扩展@Override}}该类用于处理来自服务消费方的请求,并返回结果try {try {try {System.out.println("执行的结果:" + result);}}}}}

2022-09-25 10:29:28 391

原创 MyBatis 查询数据库入门

model 与数据库交互controller 与前端交互server 决定调用哪些映射方法mapper 操作数据,实现映射\为了能与数据进行交互,需要创建实体类,来存储在数据库中得到的结果。在model目录底下创建实体类,(实体类名称最好与数据库的表名一致,这样更好处理):在实体类里面的字段,也要和数据库中表里面的字段名称相同:\下面就可以在mapper包底下写数据了:注意:一定要在接口上加上 注解@Mapper。在我们给接口加上 @Mapper 注解后,它就不是一个单纯的接口了。

2022-09-25 09:37:17 502

原创 Java高并发革命!JDK19新特性——虚拟线程(Virtual Threads)

虚拟线程具有和 Go 语言的 goroutines 和 Erlang 语言的进程类似的实现方式,它们是用户模式(user-mode)线程的一种形式。在过去 Java 中常常使用线程池来进行平台线程的共享堆栈跟踪不提供可用的上下文调试器不能单步执行请求处理逻辑分析器不能将操作的成本与其调用方关联。而虚拟线程既保持与平台的设计兼容,同时又能最佳地利用硬件从而不影响可伸缩性。虚拟线程是由 JDK 而非操作系统提供的线程的轻量级实现虚拟线程是没有绑定到特定操作系统线程的线程。平台线程。

2022-09-25 09:07:37 2967 1

原创 手把手教你如何通过Java给图片添加文字和图片水印

最近工作上有个需求,动态生成一张图片,具体来说就是基于模版图片动态添加文字和图片(文字内容不同,图片数目不同),其中文字大小不全一样,且对位置有所要求。本文将剖析多个技术方案来实现水印生成,并最终抉择出最优方案。工作上遇到技术问题时,最好先做好技术调研工作,尽量全面,不要找到一种就认为完事大吉了,我们还要考虑业务需求,将各种技术难点列举出来,看看该方案是否都能解决。

2022-09-23 11:10:12 965

原创 阿里P8大神讲解的跳跃表确定不了解下?

对于数据量大的链表结构,插入和删除比较快,但是查询速度却很慢。那是因为无法直接获取某个节点,需要从头节点开始,借助某个节点的next指针来获取下一节点。即使数据是有序排放的,想要查询某个数据,只能从头到尾遍历变量,查询效率会很低,时间复杂度为O(n)。如果我们需要快速查询链表有啥办法呢?有同学说用数组存放,但是如果不改数据结构呢?我们可以先想想在有序数组结构中有二分法,每次将范围都缩小一半,这样查询速度提升了很多,那么在链表中能不能也使用这种思想。这就到了今天讲的主角——跳跃表。

2022-09-23 09:56:45 93

原创 对内 DDD 对外 API 之—对外 API 的设计理念

对内 DDD,对外 API 是去哪儿网机票目的地事业群业务研发团队2020年 Q3 重点推出的业务重塑架构设计理念。在2020年 Q3,去哪儿网在过往的基础上,在 API 标准化这个领域做出了一些进步,这篇文章主要就是把这方面的经验和大家分享一下。什么是对内 DDD,对外 API 呢,这个是我们业务研发领域内使用 DDD 作为领域设计、微服务设计的理念的实践原则,领域间使用 API 进行交互的一种通俗易懂的说法。

2022-09-23 09:40:37 267

原创 这样Debug,排查问题效率大大提升...

debug代码是一个常用而且很常见的技能,但是不是每个人都能很有效率的debug代码...有一些idea隐藏的debug方式,虽然一些人不关注,但是有用并且能极大提升效率文章主要介绍一些一些在实际项目中相对有用的可以提升debug能力的一些经验。最后如果说实在是有问题,但是又没办法进入调试模式,可以考虑arthas的trace和watch。

2022-09-23 09:19:28 212

原创 “被裁员“! 有这份面试突击手册! 一周斩获6个offer!

近日各个社交媒体上面大厂裁员消息铺面而来,每次都在社会上引起一阵骚动,就这几日来说Shopee裁员登上顶峰,我看到的消息是应该裁了将近1000人,在这寒冬经济环境不太好的情况下,很多程序员朋友很关心的问题就是自己会不会被裁员,自己被裁员怎么办。看了无数篇文章总结下来,发现没别的就是程序员必须用硬实力说话不断的学习,把你丢掉的知识都拾起来,成为公司不可被替代的中流支柱。如果你实在运气不太好,公司倒闭了!那也不要担心,把八股文,面试题,简历啥的拾起来就是啦!这担心啥呀!这不就给你们整理出来了吗!

2022-09-22 11:47:31 398

原创 【项目实战】Java 贪吃蛇

作为贪吃蛇游戏的主启动类,构建了顶级窗口,可以容纳各种面板,

2022-09-22 11:16:48 323

原创 Java19 正式 GA!看虚拟线程如何大幅提高系统吞吐量

本文描述了 Java 线程模型、Java 虚拟线程的使用、原理以及适用场景,也与风靡的 Go 协程做了比较,也能找到两种实现上的相似之处,希望能帮助你理解 Java 虚拟线程。Java19 虚拟线程是预览特性,很有可能在 Java21 成为正式特性,

2022-09-22 10:18:37 235

原创 聊聊分布式一致性

互联网时代和环境下,为了快速需求响应和提高系统吞吐,往往进行微服务化改造,将复杂系统和数据进行拆分;这时候的一致性指分布式服务化系统之间的弱一致性,包括应用系统一致性和数据一致性;生活中的一致性例子:银行处理转账时,扣减你账户上的余额,然后增加别人账户的余额;如果扣减你的账户余额成功,增加别人账户余额失败,那么你就会损失这笔资金。反过来,如果扣减你的账户余额失败,增加别人账户余额成功,那么银行就会损失这笔资金,银行需要赔付;下面通过理论和实际方案的介绍,来学习分布式一致性相关内容!

2022-09-22 09:54:31 530

原创 40 个 SpringBoot 常用注解:让生产力爆表!

本次课程总结了Spring Boot中常见的各类型注解的使用方式,让大家能够统一的对Spring Boot常用注解有一个全面的了解。

2022-09-22 09:35:34 107

原创 腾讯太强了,正式开源 Spring Cloud Tencent,功能真心强大!!

服务注册与发现是 Spring Cloud Tencent 最为核心的功能之一,通过实现 Spring Cloud 的服务注册与发现的标准接口,提供微服务应用快速接入北极星服务注册中心的能力。我们在设计模型的时候,参考了业界主流的配置中心产品,我们认为配置文件、配置文件组的概念,是开发者广泛认知且理解成本最低的配置领域模型,例如本地磁盘的文件夹和文件的概念。随着业务发展的日益壮大,网络请求量也越来越多,导致在某些场景下,业务应用的服务端会出现爆发式的流量涌入,因此需要对服务提供方的给予一些保护手段。

2022-09-22 09:16:38 189

原创 SpringBoot2源码2-核心启动过程和run方法

配置Servlet web容器。ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class 导入组件,web服务工厂定制器的后置增强导入了三种不同的web服务器(Tomcat、Jetty、Undertow),默认是Tomcat我们来看一下方法中的参数都是从容器中获取,我们可以自定义直接放到容器中。实现接口,该接口的getWebServlet()方法就是创建 Tomcat容器。

2022-09-21 15:09:54 569

原创 Redis系列之——深入了解Redis的String,源码层级+极易理解图片解析!

Redis最常用的数据类型有五种五种其实是Redis键值对中值存储的数据类型,而他们的底层数据结构一共有6种:分别是数据类型和数据结构的对应关系如下图:这张图会在未来几篇文章中反复出现,帮大家彻底了解Redis的基础类型。

2022-09-21 14:18:54 156

原创 阿里最新SpringBoot原理最佳实践真香!从零到构建完整体系!

Spring Boot不用多说,是咱们Java程序员必须熟练掌握的基本技能。工作上它让配置、代码编写、部署和监控都更简单,面试时互联网企业招聘对于Spring Boot这个系统开发的首选框架也是考察的比较严苛,如果你不是刚入行,只是停留在会用的阶段,那是远远不够的。虽然Spring Boot易上手,但很多小伙伴也是时不时会跟我反映,Spring Boot技术体系太庞杂了,包含了太多的技术组件,不知道到底该如何高效学习,建立起全面且完整的Spring Boot技术体系和实践技巧,这个时候站在巨人的肩膀上学习就

2022-09-21 10:29:58 327

原创 复刻一个羊了个羊掘金商城版

与羊了个羊逻辑一致,不再赘述。初始化处理清空容器的相关逻辑。同样添加点击事件处理。

2022-09-21 09:51:05 84

原创 GraphicsMagick之实践出真知

是个图片处理库,是从ImageMagick 5.5.2分支出来的,但是现在他变得更稳定和更轻、更快一些GraphicsMagick 号称图像处理领域的瑞士军刀。短小精悍的代码却提供了一个鲁棒、高效的工具和库集合,来处理图像的读取、写入和操作,支持超过88种图像格式,包括重要的DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF。通过使用 OpenMP 可是利用多线程进行图片处理,增强了通过扩展 CPU 提高处理能力。

2022-09-21 09:27:59 403

原创 大厂10年经验,我对Java高并发问题方案的总结,堪称教科书级

你比别人强的地方,不是你做过多少年的CRUD工作,而是你比别人掌握了更多深入的技能。不要总停留在CRUD的表面工作,理解并掌握底层原理并熟悉源码实现,并形成自己的抽象思维能力,做到灵活运用,才是你突破瓶颈,脱颖而出的重要方向!你在刷抖音,玩游戏的时候,别人都在这里学习,成长,提升,人与人最大的差距其实就是思维。你可能不信,优秀的人,总是在一起!!!

2022-09-20 16:40:27 659

原创 在Windows环境与Linux环境下搭建Zookeeper单机环境与集群环境

1.访问地址:下载需要的ZK版本,下载到本地后解压。2.在解压目录下面新建一个空的 data 文件夹和 log 文件夹。

2022-09-20 13:16:55 328

原创 Linux多线程

举例说明 : 一间教室只允许一个学生上自习,一个学生拿着锁进了教室,把教室锁上,开始在教室上自习,其他学生想要上自习只能等待该学生上完自习后把锁拿出来,该学生上完自习了,把锁拿了出来,但突然又想再学习一会,因为该学生离锁最近,于是该学生又把锁抢走,去上自习,其他学生又只能等待,但该学生没上几分钟又坐不住出去了,然后又想再学习一会回来,就这样循环往复,导致其他学生无法竞争到锁,为了让其他学生可以竞争到锁,就规定让该学生把锁拿出来后去后面排队。lock和unlock的。所以函数调用是一种紧耦合。

2022-09-20 11:36:52 376

原创 两万字带你了解Java多线程(详细大总结)

什么是进程?进程是一个应用程序(1个进程是一个软件)。什么是线程?线程是一个进程中的执行场景/执行单元。一个进程可以启动多个线程。对于java程序来说,当在DOS命令窗口中输入:java HelloWorld回车之后。会先启动JVM,而JVM就是一个进程。JVM再启动一个主线程调用main方法。同时再启动一个垃圾回收线程负责看护,回收垃圾。最起码,现在的java程序中至少有两个线程并发,一个是垃圾回收线程,一个是执行main方法的主线程。

2022-09-20 10:07:02 91

原创 SpringBoot2源码1-嵌入式Tomcat启动和@SpringBootApplication注解原理

AutoConfigurationGroup#process方法调用了AutoConfigurationImportSelector或者ImportAutoConfigurationImportSelector的selectImports方法,拿到AutoConfigurationEntry,暂存在autoConfigurationEntries里,并且每个导入进来的类都暂存在entries里。可能是由多个配置类导入的,最后返回的时候要知道import进来的类是由哪个配置类import进来的。

2022-09-20 09:39:35 338

原创 基于SpringDataElasticsearch+SpEL表达式实现ES动态索引

一般情况下,当我们使用去操作ES时,索引名称都会在@Document注解中写死,每次都是对这个固定的索引进行操作。假如我们现在处于一个多租户系统中,每个租户都有自己所对应的用户数据,而这些用户数据都会被导入到ES中,那怎么实现各个租户的用户数据索引隔离呢?换言之,在同一个索引结构的情况下怎么实现一个租户一个索引?解决方案:使用SpEL表达式动态获取索引。

2022-09-20 09:20:18 1014

原创 5分钟,带你看完24岁60W年薪架构师的简历,上面竟然写着精通JVM

近期,看了一份24岁60W年薪架构师简历,上面写着他的求职意向+所掌握的技能.......所掌握的技能大部分写的都是精通!我不禁想问,大佬都这么强吗?你敢在简历上把所有的技能都写精通吗?

2022-09-19 15:52:52 331

原创 MYSQL外键约束&用户管理

本文主要讲了数据表和用户管理的基本操作:当不在需要一张表时,用drop;想删除部分数据行时,用delete,并带上where;删除数据保留表时用truncate因克隆表时无法克隆索引等信息,所以克隆表只能用于临时备份数据,在实际生产中也仅用于备份数据,防止误删除数据,造成不必要的损失在遗忘MySQL的root密码时,更改配置文件并更改密码后,记得要将配置文件还原,否则其它用户可以直接免密登录​​​​​​​。

2022-09-19 15:16:56 248

原创 程序员如果都懂SpringWebFlux框架的话,也不用天天CRUD了

Spring WebFlux基于Reactor框架,同时支持RxJava类库,构建响应式编程框架。查看WebFlux的Maven依赖,可以发现它依赖的项目工程包有Reactor、Spring、ReactiveX、RxJava等模块,使用WebFlux需要单独引用它的依赖包,WebFlux主要的包依赖关系如下图所示。WebFlux的主要特征● 采用Reactor响应式编程框架,同时提供对RxJava类库的支持。● Spring WebFlux基于响应式流,可以建立异步、非阻塞、事件驱动的服务。

2022-09-19 14:43:12 574

原创 MySQL约束和事务知识归纳。

目录。

2022-09-19 14:16:42 317

原创 Spring boot 实战指南(二):Mybatis、动态绑定、多数据源、分页插件、Mybatis-Plus

type-aliases-package: com.tracy.mybatisdemo.entity表示将UserMapper.xml中的resultType与com.tracy.mybatisdemo.entity包下的实体类绑定起来,否则UserMapper.xml中的resultType需要写上完整的包名com.tracy.mybatisdemo.entity.user。其实现原理是在执行查询的时候,获取页面参数,通过拦截器在 SQL 语句中添加分页参数生成分页 SQL, 最终实现分页查询。

2022-09-19 09:31:28 571

原创 SpringSecurity+JWT认证流程解析

Bean}这个Bean是不必可少的,Spring Security在认证操作时会使用我们定义的这个加密器,如果没有则会出现异常。@Bean}这里将Spring Security自带的authenticationManager声明成Bean,声明它的作用是用它帮我们进行认证操作,调用这个Bean的authenticate方法会由Spring Security自动帮我们做认证。

2022-09-17 16:54:39 241

原创 微服务:剖析一下源码,Nacos的健康检查竟如此简单

前面我们多次提到Nacos的健康检查,比如《微服务之:服务挂的太干脆,Nacos还没反应过来,怎么办?》一文中还对健康检查进行了自定义调优。那么,Nacos的健康检查和心跳机制到底是如何实现的呢?在项目实践中是否又可以参考Nacos的健康检查机制,运用于其他地方呢?这篇文章,就带大家来揭开Nacos健康检查机制的面纱。

2022-09-17 15:05:51 402

原创 MySQL主从复制与读写分离

■在企业应用中,成熟的业务通常数据量都比较大■单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求■配置多台主从数据库服务器以实现读写分离一、读写分离概述什么是读写分离?读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。2.为什么要读写分离呢?因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。

2022-09-17 13:35:18 84

原创 名震GitHub,字节跳动内部顶级数据结构刷题学习笔记根本停不下来

从大部分的字节招聘岗位来说的话,Java研发岗位位居榜首!这个消息一经发布就让大部分的程序员蠢蠢欲动,毕竟字节谁不想去?字节跳动的岗位大多数看中的都是算法,所以说在算法部分不在强的小伙伴可以开始刷题了,今天给大家带来的就是一份来自字节内部的《排序和数据结构刷题学习笔记》拿他们的剑斩获他们的offfer“不香吗”?这份资料没有别的优点,唯一的优点就是“全面”相信这点大家从目录就可以看出来了!

2022-09-17 13:25:40 216

原创 springBoot异步线程,父子线程数据传递的5种姿势

分析: 分析打印3为什么是1,InheritableThreadLocal的继承性是在new Thread创建子线程时候在构造函数内把父线程内线程变量拷贝到子线程内部的。为了不在创建新线程耗费资源,我们一般会用线程池,线程池的线程会复用,那么线程中的ThreadLocal便不对了,可能是旧的,因为线程是旧的。方案1,方案2,方案3主要是借助TaskDecorator进行父子线程之间传递数据。其中MDC方案主要借鉴于MDC的日志跟踪的思想来实现,关于MDC相关的日志跟踪后续会学习分享。

2022-09-17 10:23:40 924 1

原创 Java 多线程:并发编程的三大特性

对象 T 在创建过程中,背后其实是包含了多条执行语句的,由于有 CPU 乱序执行的情况,所以极有可能会在初始化过程中生成以一个半初始化对象 t,这个 t 的 m 等于 0(还没有来得及做赋值操作)在从内存中读取数据的时候,根据的是程序局部性的原理,按块来读取,这样可以提高效率,充分发挥总线 CPU 针脚等一次性读取更多数据的能力。,指的就是内存中的某个数据,假如第一个 CPU 的一个核读取到了,和其他的核读取到这个数据之间的可见性。,恢复中断的代价是比较大的,所以我们要想尽办法不让流水线中断。

2022-09-17 10:07:27 238

原创 Java 进阶多线程(二)

生产者线程生产完数据后唤醒消费者,然后等待自己,消费者消费完该数据后唤醒生产者,然后等待自己。Callable接口中的Call方法有返回值,Runnable接口中的Run方法没有返回值。Callable接口中的Call方法有声明异常,Runnable接口中的Run方法没有异常。生产者与消费者模型:生产者线程负责生产数据,消费者线程负责消费生产者产生的数据。用Executors(线程池的工具类)调用方法返回不同特点的线程池对象。线程通信就是线程间相互发送数据,线程间共享一个资源即可实现线程通信。

2022-09-17 09:13:06 117

空空如也

空空如也

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

TA关注的人

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