美团笔试收获
参加了一次美团笔试,收获颇多。 不同的输入方法 和力扣不一样,一些大厂的笔试包括面试时的算法题都是 ACM 模式,也就是需要自己处理输入,然后对输入处理并输出,而力扣是核心代码模式,不用你管输入,只需要实现指定方法,平台自会调用你的方法。在参加之前,我去卡码网上了解了一下,发现还是 Scanner 那一套,也就没在意,但当我真正开始做的时候感到有点不对,Scanner 恐怕不太够用。这篇博客主要讲一下 Java 里的输入流。 Java 的输入体系建立在 流 的概念之上,主要有两个抽象基类:InputStream 和 Reader ,前者为字节流,处理原始字节数据,如图片、音频等;后者为字符流,处理字符数据,如文本文件、控制台输入等。两者之间通过 InputStreamReader 作为桥梁,将字节流转换为字符流。 InputStream 字节流 InputStream...
权限模型
常见的权限模型有两种:RBAC 和 ABAC。 两种模型介绍 RBAC 模型 Role-Based Access Control,翻译为基于角色的访问控制。角色拥有某些权限,通过赋予用户某种角色来达到给用户授予相关权限的目的,这就是基于角色。实现较简单。在一些大型组织中,角色可能爆炸式增长,导致管理复杂、权限冗余。 ABAC 模型 Attribute-Based Access Control,翻译为基于属性的访问控制,它比 RBAC 更加灵活,因为在 ABAC 模型中,一个操作是否被允许是基于对象、资源、操作和环境信息共同动态计算决定的。它的控制更细粒度,比如它能实现“仅允许大学生在水课上睡觉”的控制。 派聪明的权限控制 派聪明是二哥的一个项目。 派聪明的权限模型是改进版的 RBAC,或者说简化版的 ABAC。设计了 admin 和 user...
手写简单IoC容器
学习 Spring,跟着二哥简单写个 IoC 容器。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @interface MyAutowired { } @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @interface MyComponent...
LeetCode155.最小栈
第二次碰到这道题了,又学了两种解题方法,记录一下。 题目介绍 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int...
LeetCode8.字符串转换整数
一切源于一道题目:8. 字符串转换整数 (atoi) - 力扣(LeetCode) 考虑这样一个问题:给你一个数字字符串,如何在32位环境下安全的处理可能超过[-2^31, 2^31 - 1]范围的数字,不能使用64位变量临时存储。 因为我熟悉Java, 所以下面提到的数据类型都为 Java 中的数据类型。 12Integer.MAX_VALUE = 2^31 - 1 = 2147483647;Integer.MIN_VALUE = -2^31 = -2147483648; 首先题目说不能使用64位变量,所以 Long 类型不能使用,那就一步一步累加,具体思路就是设置两个变量 digit, res,从头到尾遍历字符串每一位,同时计算 res = res * 10 + digit。但这样的话,累加过程中 res 可能会无征兆直接溢出,程序直接抛异常。那怎么办,介绍一下从 K神题解...
Java集合源码阅读
先附上二哥网站上关于集合框架的结构图 版本为JDK21 ArrayList 扩容机制 先介绍一下 ArrayList 中的关键变量: transient Object[] elementData 底层用来存储元素的数组 private int size; 表示集合中元素的实际数量 private static final int DEFAULT_CAPACITY = 10; 默认初始容量 private static final Object[] EMPTY_ELEMENTDATA = {}; 当用户调用 new ArrayList(0) 时,elementData 会引用该数组。 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};...
MySQL锁机制八股整理
整理一下MySQL锁的八股,全文整理自二哥博客。 在MySQL数据库中,锁是用来协调多个进程或线程并发访问同一资源的机制。锁不仅保证了数据的一致性和有效性,而且是影响数据库并发访问性能的一个重要因素。 共享锁与排他锁 共享锁也叫 S(shared) 锁,允许多个事务进行读操作,阻塞写操作。 排他锁也叫 X(exclusive) 锁,只允许一个事务进行读写操作,阻塞其他事务的读写操作。 兼容性如下: 表锁与行锁 表锁:锁定整个表,资源开销小,加锁快,但并发度低,不会出现死锁,适合查询为主、少量更新的场景(如 MyISAM 引擎)。可以细分为表级S锁、表级X锁。 行锁:锁定单行或多行,开销大、加锁慢,可能出现死锁,但并发度高(InnoDB 默认支持)。可以细分为记录锁、间隙锁、临键锁,也可以分为共享锁和排他锁(与表级S锁、表级X锁一个意思,前提是行锁)。 表锁详细版: 表锁常见于...
MySQL索引八股整理
整理一下MySQL索引的八股。 索引介绍 索引是数据库中用于加速查询的数据结构,通过对表中某列或多列的值进行排序,可以快速定位所要查找的数据。就像小时候在汉语字典里查字时,会先根据偏旁笔画数找到偏旁,然后根据剩余笔画找到目标字,这比在整个字典中一个一个查找是快很多的。 索引分类 索引有以下分类 索引详细介绍 主键索引: 主键索引用于唯一标识表中的每条记录,其值必须唯一且非空。每个表只允许有一个主键索引,一般为表中的自增id。 创建主键时,数据库会自动生成主键索引。若没有指定主键,MySQL的InnoDB存储引擎会优先选择一个非空的唯一索引作为主键,如果没有符合条件的索引,MySQL会自动生成一个隐藏的聚簇索引。 唯一索引: 主键索引 = 唯一索引 +...
Java泛型
泛型定义 先看这样一个例子: 123456789public static void main(String[] args) { List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); for (int i = 0; i < list.size(); i++) { System.out.println((String)list.get(i)); }} ArrayList集合中可以加入任何类型的对象,我本意是用这个集合来存储字符串(因为ArrayList默认存储的是Object类型的对象,所以输出时需要强转...
正则表达式
介绍 正则表达式(regular...