自定义博客皮肤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)
  • 问答 (1)
  • 收藏
  • 关注

原创 java设计模式具体应用-(发布订阅者模式)

废话不多说,直接上代码//观察者模式public class Subject{ List<Observer> list = new ArrayList<>(); //存放订阅者 private String message = "订阅消息通知"; public void addObserver(Observer observer){ list.add(observer); } public void de

2021-10-19 10:21:33 141

原创 java设计模式具体应用-(责任链模式)

废话不多说,直接上代码public void contextLoads() throws Exception { ProjectAudit projectAudit = new ProjectAudit(); //创建链表 FinanceAudit financeAudit = new FinanceAudit(); BossAudit bossAudit = new BossAudit(); projectAudit.setSuccessor(financeAudi

2021-10-19 10:19:55 98

原创 java设计模式具体应用-(策略模式)

废话不多说,直接上代码 public void contextLoads() throws Exception { String type = "bossAudit"; AuditStrategy obj = null; ProjectAudit projectAudit = new ProjectAudit(); FinanceAudit financeAudit = new FinanceAudit(); BossAudi

2021-10-19 10:18:27 111

原创 虚拟机类加载机制

一个类从被加载到虚拟机内存中,到卸载,生命周期包含7个阶段:加载(Loading), 验证(Verification), 准备(Preparation), 解析(Resolution), 初始化(Initialization), 使用(Using), 卸载(Unloading)...

2021-08-20 17:25:23 69

原创 系统设计之如何选择存储系统

缓存如果数据访问频率很高,且场景需要低延迟,可以考虑采用缓存。常用的缓存有Memcached, Hazelcast, Redis, etc. 通常都采用Redis。文件存储比如需要上传图片、音视频资料,数据库存储就不太适用。我们需要采用Blob存储系统, 比如亚马逊 S3就是典型的blob存储。同时,可以配合适用CDN。CDN利用不同区域分布式存储数据,用户根据就近原则获取数据,可以确保低延迟。提供文本搜索功能的存储系统普通的数据库不能提供文本搜索功能,这种场景我们需要采用Elasti..

2021-08-20 10:48:04 124

原创 如何设计Twitter的系统(系统设计)

第一步:确定需求先确定功能性的需求点发布twitter转发twitter关注他人搜索功能其次是非功能性的需求高频率的读操作,twitter的读写比很高(相比写操作,读操作的频率非常高),设计模式需要围绕这点进行相关设计快速渲染快速发布twitter可接受一定的延迟,注意这里的延迟是指可以允许获取关注人的动态数据的延迟,不是页面渲染的延迟高并发,twitter每天平均每秒会发布5k左右的twitter, 加上高频率的读取,并发量成倍增加,系统拥有很高的QPS(Query per s

2021-08-10 14:05:00 719

原创 消息队列如何保证消息不丢失

这里我们以RocketMQ为例子,其他消息队列的原理基本上差不多。首先确定在消息的传输过程中,会在三个阶段出现丢失数据的情况:生产者没有成功发送消息RocketMQ没有成功持久化消息消费者没有成功消费消息对应的解决办法也非常地简单,和TCP的三次握手很类似:事务机制/confirm机制:生产者开启事务,只有当RocketMQ成功收到消息了,生产者才关闭事务,但是这个方法会阻塞;confirm机制相对有优势,它属于异步操作,当生产者发送完消息后,不需要一直等待,RocketMQ接收后会通

2021-08-08 19:40:48 616

原创 什么是微服务?(简单易懂)

提起微服务,肯定要了解一下微服务的发展历史,也就是为什么会演变出微服务这种架构。传统的架构mvc:1. 随着系统容量的扩大,维护和开发成本都非常高,比如改动某个功能模块,都需要整个服务重新部署;2. 多个开发人员分别开发不同的功能模块,协同开发比较容易受影响3. 分布式存储之后,改动一处,其他服务器上的代码也要跟着改动随后提出了RPC架构,按照不同子功能进行拆分成多个独立的项目进行部署,项目间通过RPC进行通信随后继续提出SOA, 知道最近提出的微服务架构,具体发展路径如图微服务基本架构:

2021-08-08 17:29:19 229

原创 Netty线程模型(图解秒懂)

Netty是基于异步的事件驱动的网络框架和工具,常见的分布式中间件底层都有涉及到Netty。Netty基本组件:Channel、Bootstrap 、EventLoop、ChannelPipeline、ChannelHandler、FutureNetty的线程模型为三种:单Reactor单线程,单Reactor多线程、主从Reactor多线程Reactor的作用相当于一个分发器,可以分发连接请求和处理IO请求;相当于一个饭店的服务员,是可以异步非阻塞地进行工作这里的线程一般指的是处理IO请求的线程数

2021-08-08 08:42:15 1840

原创 BIO、NIO、AIO

BIO: blocking IO, 同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。这里假设一个烧开水的场景,有一排水壶在烧开水,BIO的工作模式就是, 叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。NIO: blocking IO, 同步非阻塞I/O模式,NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作AIO: blocking IO, 异步非阻塞I/O模式,无

2021-07-30 16:09:01 109

原创 同步、异步、阻塞、非阻塞(迄今为止最好的解释)

老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(

2021-07-30 16:01:22 79

原创 多线程中锁的种类

锁的种类:可重入锁:已经获取锁的线程,可重复获取对象内其他锁中断锁:线程A在等待线程B释放锁的过程中,可以自主选择中断公平锁:按照锁请求的顺序获取锁读写锁:控制线程间读操作锁的优化:6. 自旋锁:不断循环尝试7. 锁清除:如果不存在竞争,清除锁8. 锁粗化:频繁加锁和释放锁的操作,可以扩大锁的范围9. 偏向锁10. 轻量级锁11. 重量级锁...

2021-07-28 11:33:53 293

原创 线程池(看图秒懂)

线程池的优势:(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。线程池使用的关键参数:corePoolSize(必需):核心线程数。默认情况下,核心线程会一直存活,但是当将 allowCoreThreadTimeout,设置为 true 时,核心线程也会超时

2021-07-27 23:39:06 237

原创 微软算法面试题(2021最新)

今天,约了微软的面试,连续三轮,每轮1个小时,从下午2点持续到下午5点。虽然感觉自己最后一轮回答的非常烂,但是还是把面试过程分享出来,给大家一些参考吧第一轮:自我介绍+项目介绍开始做题: 合并k个链表解题思路:两两合并(考查分治方法)第二轮:自我介绍+项目介绍开始做题: 1. 如何判断一颗平衡树 2. 颜色分类(0,1,2按序排列)题1解题思路:采用递归,判断子树是否是一颗平衡树(如果是,返回子树高度;如果不是返回-1)题2解题思路:LeetCode原题,采用双指针第三轮:自我介绍+项目介

2021-07-27 20:54:53 2959

原创 红黑树(图解秒懂)

红黑树是一种含有红黑结点并能自平衡的二叉查找树,红黑树的特点:1:每个节点要么是黑色,要么是红色。2:根节点是黑色。3:每个叶子节点(NIL)是黑色。4:每个红色结点的两个子结点一定都是黑色。5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。自平衡的手段:1:左旋2:右旋3:变色查找操作同BST普通搜索二叉树;插入操作共有8种插入操作;...

2021-07-26 15:36:25 163 1

原创 Java数组的内存分配(看图秒懂)

Java数组初始化方式:静态初始化String[] names = new String[]{"张三","李四","王五","赵六"};动态初始化(每个数组元素的初始值由系统添加默认值)String[] strArr = new String[5];第三种初始化int[] nums = new int[]{1, 2, 3, 4, 5};int[] arr;arr = nums;备注:对于数组对象来说,必须初始化,也就是为该数组对象分配一块连续的内存空间,连续内存空间的长度

2021-07-26 14:56:19 641

原创 如何看待小米自动驾驶大规模招人?

你觉得小米造车的优势是什么?纯互联网模式是否到达瓶颈,需要往硬件和软件结合的领域深耕?

2021-07-26 13:25:09 133

原创 LeetCode(目标和)

决定做一期LeetCode 热题100算法题的分享,我会对每一行代码进行注释,希望对于入门读者有一些帮助。问题描述:给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例1:输入:nu

2021-07-26 13:02:42 292

原创 wait和sleep区别(秒懂系列)

sleep(休眠) 和 wait(等待) 方法是 Java 多线程中常用的两个方法sleep是Thread类的静态方法,wait是Object类的方法;sleep的作用是让线程休眠制定的时间,在时间到达时恢复,也就是说sleep将在接到时间到达事件事恢复线程执行;. 任意一个对象调用wait方法,调用wait方法将会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者sleep不释放锁,wait当前线程释放锁,等Object.notify()后重新获取锁sleep结束

2021-07-26 12:43:37 128

原创 JAVA异常分类以及处理机制(秒懂系列)

异常分类 Throwable是Java语言中所有错误或异常的超类,下一层分为Error和Exception:Error:Java运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现这样的错误,除了告知用户,剩下的就是尽力使程序安全地终止。Exception:该异常是程序本身可以处理的异常,异常和错误的区别是,异常是可以被处理的,而错误是没法处理的。Exception又有两个分支,一个是运行时异常RuntimeException, 一 个 是编译异常 CheckedException。

2021-07-22 17:35:09 164

原创 LinkedHashMap实现原理(图解秒懂)

LinkedHashMap:在HashMap的基础上,具备顺序存储的功能。底层实现是hashMap+双向列表的组合,具体如下图:

2021-07-22 16:59:58 986

原创 final finally finalize(总结到位)

final: 用于声明属性,方法和类, 分别表示属性不可变, 方法不可覆盖, 类不可继承.finally: 是异常处理语句结构的一部分,表示总是执行.finalize: 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等. JVM不保证此方法总被调用....

2021-07-21 06:20:33 44

原创 spring事务传播(图解秒懂)

事务传播等级说明PROPAGATION_REQUIRED当前方法必须在一个具有事务的上下文中运行,如有客户端有事务在进行,那么被调用端将在该事务中运行,否则的话重新开启一个事务PROPAGATION_SUPPORTS当前方法不必需要具有一个事务上下文,但是如果有一个事务的话,它也可以在这个事务中运行PROPAGATION_MANDATORY当前方法必须在一个事务中运行,如果没有事务,将抛出异常PROPAGATION_REQUIRES_NEW当前方法必须运行在它自...

2021-07-21 00:03:34 223

原创 JDK 1.7和JDK1.8区别(看图秒懂)

能说出三四条就可以了,注重理解,可解和hashMap的知识一起看~StreamApi: jdk1.8增加了stream特性,主要是基于fork-join框架构建,而且你可以通过parallel()与sequential()在并行流与顺序流之间进行切换。Hashmap性能优化:a. 1.7是数组+链表,1.8则是数组+链表+红黑树结构;b. 1.8尾插法,1.7中是采用头插hashCode值计算:a. jdk1.7直接使用key的hashCode值b. 1.8中则是采用key的h.

2021-07-20 15:16:38 1600

原创 HashMap为什么线程不安全(看图秒懂)

HashMap为什么线程不安全(一张图秒懂)扩容包括两部分:resize+rehash, resize创建一个新的更大的数组,rehash将旧数组元素拷贝到新数组,线程不安全发生在rehash阶段,因为会造成链表环。假设线程1和线程2同时扩容:...

2021-07-20 11:28:35 147 1

原创 HashMap put详细流程图(看图秒懂)

HashMap put详细流程图,看完你就懂

2021-07-20 09:06:02 598 1

原创 Java基础-面试题精华(2021最新)

Java基础-面试题精华提示:本人已经成功帮助20多位面试者斩获BAT大厂offer,现在把自己的笔记分享出来,提炼出高频java面试题目,都是干货,觉得有用的话,记得点赞收藏哦,后期会上spring相关高频面试题,值得期待Java基础-大厂高频面试题Java基础-面试题精华1. List 和 Set 的区别2. HashSet 是如何保证不重复的3. HashMap是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)?4. HashMap 的扩容过程5. HashMap 1.7 与

2021-07-19 12:41:10 138

原创 2020-05-26

2016年,经历了7个多月的考研备战,成功跨专业考上浙大软院,并成功转行成为名企程序媛的经历,有想了解的吗?我可以找时间跟大家分享一下,这一路的思考,准备,实习到工作

2020-05-26 20:32:59 113 1

原创 windows下查看端口占用,杀死进程

问题描述:eclipse中启动tomcat报错8080端口被占用解决方案:1、win+r 快捷键,或输入cmd,进入dos窗口;2、输入命令netstat -aon|findstr “8080”,查找到被占用的进程号,比如6646;3、输入命令:taskkill /f /pid 6646,成功杀死6646进程,释放被占用的8080端口...

2020-05-13 18:16:43 123

原创 eclipse找不到hibernate code generation的图标

问题描述:eclipse找不到hibernate code generation的图标解决方法:1、eclipse中找到windows->perspective->customize perspective2、弹出如下,勾选Hibernate,关闭弹框。3、eclipse中找如下图标,点击小三角展开4、选择Hibernate code generation configuration就可以了如果对你有用,请记得点赞哦~~...

2020-05-13 17:59:39 407

原创 tomcat启动是报Multiple Contexts have a path of "/XXX"

问题描述:tomcat启动是报Multiple Contexts have a path of “/XXX”解决方法很简单:1、找到server.xml文件2、找到重复的context, 删除一条就解决了好用点个赞吧~~~

2020-05-12 17:07:42 152

原创 Missing artifact com.alibaba:fastjson:jar:1.2.58

pom.xml文件中的相关依赖版本不对,可以到mavenrepository仓库中选用最新的版本号

2020-05-09 18:22:34 1710

原创 Eclipse中server启动超时的解决方法

Eclipse中server启动超时的解决方法问题描述:结果在eclipse里启动tomcat的时候出现以下的错误: Server Tomcat v8.5 at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor解决方法:双击server找到Timeouts–start,设置server启

2020-05-09 09:50:42 763

空空如也

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

TA关注的人

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