笔记
小米软件工程师
自学编程,从英语专业成功跨考浙大计算机的研究生,目前小米全栈工程师,single dog
展开
-
虚拟机类加载机制
一个类从被加载到虚拟机内存中,到卸载,生命周期包含7个阶段:加载(Loading), 验证(Verification), 准备(Preparation), 解析(Resolution), 初始化(Initialization), 使用(Using), 卸载(Unloading)...原创 2021-08-20 17:25:23 · 72 阅读 · 0 评论 -
系统设计之如何选择存储系统
缓存如果数据访问频率很高,且场景需要低延迟,可以考虑采用缓存。常用的缓存有Memcached, Hazelcast, Redis, etc. 通常都采用Redis。文件存储比如需要上传图片、音视频资料,数据库存储就不太适用。我们需要采用Blob存储系统, 比如亚马逊 S3就是典型的blob存储。同时,可以配合适用CDN。CDN利用不同区域分布式存储数据,用户根据就近原则获取数据,可以确保低延迟。提供文本搜索功能的存储系统普通的数据库不能提供文本搜索功能,这种场景我们需要采用Elasti..原创 2021-08-20 10:48:04 · 131 阅读 · 0 评论 -
如何设计Twitter的系统(系统设计)
第一步:确定需求先确定功能性的需求点发布twitter转发twitter关注他人搜索功能其次是非功能性的需求高频率的读操作,twitter的读写比很高(相比写操作,读操作的频率非常高),设计模式需要围绕这点进行相关设计快速渲染快速发布twitter可接受一定的延迟,注意这里的延迟是指可以允许获取关注人的动态数据的延迟,不是页面渲染的延迟高并发,twitter每天平均每秒会发布5k左右的twitter, 加上高频率的读取,并发量成倍增加,系统拥有很高的QPS(Query per s原创 2021-08-10 14:05:00 · 761 阅读 · 0 评论 -
消息队列如何保证消息不丢失
这里我们以RocketMQ为例子,其他消息队列的原理基本上差不多。首先确定在消息的传输过程中,会在三个阶段出现丢失数据的情况:生产者没有成功发送消息RocketMQ没有成功持久化消息消费者没有成功消费消息对应的解决办法也非常地简单,和TCP的三次握手很类似:事务机制/confirm机制:生产者开启事务,只有当RocketMQ成功收到消息了,生产者才关闭事务,但是这个方法会阻塞;confirm机制相对有优势,它属于异步操作,当生产者发送完消息后,不需要一直等待,RocketMQ接收后会通原创 2021-08-08 19:40:48 · 635 阅读 · 0 评论 -
红黑树(图解秒懂)
红黑树是一种含有红黑结点并能自平衡的二叉查找树,红黑树的特点:1:每个节点要么是黑色,要么是红色。2:根节点是黑色。3:每个叶子节点(NIL)是黑色。4:每个红色结点的两个子结点一定都是黑色。5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。自平衡的手段:1:左旋2:右旋3:变色查找操作同BST普通搜索二叉树;插入操作共有8种插入操作;...原创 2021-07-26 15:36:25 · 175 阅读 · 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 · 657 阅读 · 0 评论 -
如何看待小米自动驾驶大规模招人?
你觉得小米造车的优势是什么?纯互联网模式是否到达瓶颈,需要往硬件和软件结合的领域深耕?原创 2021-07-26 13:25:09 · 140 阅读 · 0 评论 -
LeetCode(目标和)
决定做一期LeetCode 热题100算法题的分享,我会对每一行代码进行注释,希望对于入门读者有一些帮助。问题描述:给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例1:输入:nu原创 2021-07-26 13:02:42 · 306 阅读 · 0 评论 -
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 · 135 阅读 · 0 评论 -
JAVA异常分类以及处理机制(秒懂系列)
异常分类 Throwable是Java语言中所有错误或异常的超类,下一层分为Error和Exception:Error:Java运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现这样的错误,除了告知用户,剩下的就是尽力使程序安全地终止。Exception:该异常是程序本身可以处理的异常,异常和错误的区别是,异常是可以被处理的,而错误是没法处理的。Exception又有两个分支,一个是运行时异常RuntimeException, 一 个 是编译异常 CheckedException。原创 2021-07-22 17:35:09 · 173 阅读 · 0 评论 -
LinkedHashMap实现原理(图解秒懂)
LinkedHashMap:在HashMap的基础上,具备顺序存储的功能。底层实现是hashMap+双向列表的组合,具体如下图:原创 2021-07-22 16:59:58 · 1006 阅读 · 0 评论 -
HashMap为什么线程不安全(看图秒懂)
HashMap为什么线程不安全(一张图秒懂)扩容包括两部分:resize+rehash, resize创建一个新的更大的数组,rehash将旧数组元素拷贝到新数组,线程不安全发生在rehash阶段,因为会造成链表环。假设线程1和线程2同时扩容:...原创 2021-07-20 11:28:35 · 157 阅读 · 1 评论 -
HashMap put详细流程图(看图秒懂)
HashMap put详细流程图,看完你就懂原创 2021-07-20 09:06:02 · 685 阅读 · 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 · 149 阅读 · 0 评论 -
2020-05-26
2016年,经历了7个多月的考研备战,成功跨专业考上浙大软院,并成功转行成为名企程序媛的经历,有想了解的吗?我可以找时间跟大家分享一下,这一路的思考,准备,实习到工作原创 2020-05-26 20:32:59 · 121 阅读 · 1 评论