- 博客(27)
- 问答 (3)
- 收藏
- 关注
原创 synchronized 能否被中断?
**结论:**已经获取到锁的能被中断,正在等待锁的不能被中断。如:运行结果:这里线程 A 获取到锁后被中断了。又如:线程 A 会一直处于等待状态,并不会被中断。
2022-07-03 19:25:57
783
原创 数据库索引的优缺点
优点 * 提高数据检索效率,降低 IO 成本 * 唯一索引可以保证数据的唯一性 * 加速表和表之间的连接,对于有依赖关系的子表和父表联合查询时,可以提高查询速度 * 减少查询中分组和排序的时间,降低 CPU 消耗缺点 * 创建和维护索引需要耗费时间 * 索引需要占用磁盘空间 * 降低了数据更新的速度,因为对数据进行更新时,索引也要动态地维护
2022-06-01 14:47:38
763
原创 InnoDB 和 MyISAM 的区别
InnoDB 支持外键和事务,MyISAM 不支持InnoDB 支持行锁和表锁,MyISAM 只支持表锁InnoDB 有重启后的崩溃恢复功能 (基于事务)MyISAM 只缓存索引,不缓存真实数据;InnoDB 不仅缓存索引还缓存真实数据,对内存要求较高,且内存大小对性能有决定性的影响数据量较小,且操作多为插入和查询时,MyISAM 性能高一些MyISAM 针对数据统计有额外的变量存储,故 count(*) 的查询效率很高数据文件结构InnoDB:表名.frm (存储表结构,8.0 时被合并.
2022-05-31 17:13:56
246
原创 1.8 ConcurrentHashMap 总结
底层结构Node 数组 + 链表 + 红黑树原理synchronized + CAS构造方法public ConcurrentHashMap(int initialCapacity) { if (initialCapacity < 0) throw new IllegalArgumentException(); int cap = ((initialCapacity >= (MAXIMUM_CAPACITY >>> 1))
2022-05-29 19:36:23
132
原创 1.7 ConcurrentHashMap 总结
底层结构Segment 数组,每个 Segment 对象中包含一个 HashEntry 数组,数组元素可以是链表原理分段锁(Segment 继承自 ReetrantLock)构造方法public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)计算 Segment 数组的长度 ssize:大于等于 concurrencyLevel 的最小 2 的次幂;记录 segmentShift 和
2022-05-28 17:15:21
181
原创 Java HashMap 总结 (1.7/1.8)
底层结构1.7:数组 + 链表1.8:数组 + 链表 + 红黑树put 方法流程1.7判断数组是否已初始化,没有则进行初始化(容量默认是16,若在构造方法中指定了则为大于等于指定容量的最小 2 的次幂)计算下标,若 key 为 null 则下标为 0,key 不为 null 时下标为 hash & length - 1,其中 hash 值通过 key.hashCode() 与哈希种子计算得到调用 addEntry 方法,先判断是否需要扩容,扩容条件为:元素数量(插入前) >=
2022-05-27 18:18:05
272
原创 Java List 的 remove 方法
Java List 的 remove 方法有两个重载,一个接收 int 型参数(通过下标删除),一个接收 Object 型参数(通过元素删除)。对于 List<Integer>,如果传入一个整型字面值,会删除对应下标处的元素,如:public class Main { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); l
2022-03-17 13:28:29
15260
2
原创 Java instanceof 运算符
Java 的 instanceof 运算符可以用来判断一个对象是不是某个类(接口)的实例。注意点:左边必须是引用类型,否则编译不通过;左边对象的编译时类型必须与右边的类相同或有继承关系,否则编译不通过;右边的类不能带泛型的类,否则编译不通过(泛型擦除,运行时没有泛型信息);运行时,若左边对象不为 null 且强转为右边的类型时没有抛出异常,则返回 true,否则返回 false。参考:https://blog.csdn.net/Dream_Weave/article/details/1056
2022-03-17 08:50:17
353
原创 关于 Spring MVC 中 Model、ModelMap 和 Map
其实是同一个对象,如:@Controllerpublic class TestController { @ResponseBody @GetMapping("/test") public String test(Model model, ModelMap modelMap, Map map) { System.out.println(model == modelMap); System.out.println(model == map);
2022-02-26 13:39:42
392
原创 Spring 使用自动装配的同时手动赋值会怎么样?
在 Spring 中我们可以使用自动装配来初始化对象的属性,如果我们使用 autowire 的同时又通过 property 手动为属性赋值时会怎么样呢?(xml 配置方式)答案是:只会执行手动赋值。如:public class Dog { private String name; public String getName() { return name; } public void setName(String name) {
2021-11-19 22:52:58
234
原创 Markdown 基础语法
Markdown 基础语法(Typora)1 结构类操作1.1 多级标题语法: # + 空格 + 文字 (几个 # 代表几级标题,最多六级)快捷键: 切换级别 Ctrl + 1~6 清除级别 Ctrl + 0 增加/减小级别 Ctrl + +/-例:# 一级标题一级标题## 二级标题二级标题1.2 列表1.2.1 有序列表语法: 数字 + . + 空格 + 文字 (按回车自动在下一行添加递增序号,按方向键 “下” 则跳到下一行当不自动添加序号)快捷键: Ctrl + Shi
2021-11-02 10:53:16
183
原创 Kotlin可变长参数与Java对比
在Java中,可变长参数会被看成数组,我们甚至可以直接传入一个数组作为实参:public class Test { public static void printValue(String... strings) { for (String str : strings) { System.out.print(str); } } public static void main(String[] args) {
2021-04-29 21:36:58
284
1
原创 【AI文字识别】HarmonyOS Codelab挑战赛记录
打开 DevEco Studio,点击 Create HarmonyOS ProjectDevice选择 Phone,Template选择 Empty Feature Ability(Java),点击 next编辑项目名、保存路径点击 finish目录结构:在 “resources\base\media” 目录下添加8张jpg图片(分别命名为1-8.jpg)布局样式:base/graphic/background_ability_main.xml<?xml version
2021-04-25 13:25:43
143
原创 【图片旋转】HarmonyOS Codelab挑战赛记录
打开 DevEco Studio,点击 Create HarmonyOS ProjectDevice选择 Phone,Template选择 Empty Feature Ability(Java),点击 next编辑项目名、保存路径点击 finish准备一张像素尺寸为1024*768的图片,放到 ImageDemo\entry\src\main\resources\base\media目录下:修改布局文件 ability_main.xml<?xml version="1.0" en
2021-04-25 09:17:10
215
1
原创 【模块-Java布局】HarmonyOS Codelab挑战赛记录
下载Codelab起步应用https://gitee.com/openharmony/codelabs/tree/master/ComponentCodelab解压文件,用DevEco Studio打开ComponentCodelab:点击Tools -> HVD Manager,跳转到登录页面:点击允许,出现模拟器列表:点击 “P40” 右边的三角符号,打开模拟器:点击右上角的三角符号运行:此时点击上面的文字没有反应,因为我们还没有添加事件响应,接下来修改代码:TabLis
2021-04-25 08:43:23
253
原创 Java可变长参数
当我们不确定传入方法的参数个数时怎么办呢?我们可以使用数组,不过,Java为我们提供了一种更简便的写法:可变参数。定义可变参数很简单,只需要在形参的类型与参数名之间加上 “…” 即可,如:public class Test { static void printInt(int... intVal) { for (int val : intVal) { System.out.print(val); } System.out.
2021-04-16 19:31:54
739
1
原创 Java中属性和静态方法能被重写吗?
不能。在子类中可以定义和父类同名的变量,也可以定义和父类方法签名相同的静态方法,但这不叫重写。属性和静态方法不具有多态性。我们先来看一下属性:class A { int i = 1;}class B extends A { int i = 2;}public class Test { public static void main(String[] args) { A a = new B(); System.out.print
2021-04-14 20:09:54
1902
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人