mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-08-01 16:28:03 +08:00
Compare commits
9 Commits
3d0e56f4e5
...
ec0e0aaea8
Author | SHA1 | Date | |
---|---|---|---|
|
ec0e0aaea8 | ||
|
cb78980fdb | ||
|
a63671e626 | ||
|
7959866751 | ||
|
871bacd662 | ||
|
9795bc6824 | ||
|
3fd08c34a8 | ||
|
52af79d407 | ||
|
08a21e6eda |
@ -11,8 +11,8 @@
|
||||
</div>
|
||||
|
||||
> - **面试专版**:准备 Java 面试的小伙伴可以考虑面试专版:**[《Java 面试指北 》](./docs/zhuanlan/java-mian-shi-zhi-bei.md)** (质量很高,专为面试打造,配合 JavaGuide 食用)。
|
||||
> - **知识星球**:专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 **[JavaGuide 知识星球](./about-the-author/zhishixingqiu-two-years.md)**(点击链接即可查看星球的详细介绍,一定确定自己真的需要再加入)。
|
||||
> - **使用建议** :有水平的面试官都是顺着项目经历挖掘技术问题。一定不要死记硬背技术八股文!详细的学习建议请参考:[JavaGuide 使用建议](./javaguide/use-suggestion.md)。
|
||||
> - **知识星球**:专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 **[JavaGuide 知识星球](./docs/about-the-author/zhishixingqiu-two-years.md)**(点击链接即可查看星球的详细介绍,一定确定自己真的需要再加入)。
|
||||
> - **使用建议** :有水平的面试官都是顺着项目经历挖掘技术问题。一定不要死记硬背技术八股文!详细的学习建议请参考:[JavaGuide 使用建议](./docs/javaguide/use-suggestion.md)。
|
||||
> - **求个Star**:如果觉得 JavaGuide 的内容对你有帮助的话,还请点个免费的 Star,这是对我最大的鼓励,感谢各位一起同行,共勉!Github 地址:[https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide) 。
|
||||
> - **转载须知**:以下所有文章如非文首说明为转载皆为 JavaGuide 原创,转载请在文首注明出处。如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
|
||||
|
||||
|
@ -7,7 +7,7 @@ tag:
|
||||
|
||||
看到很多小伙伴简历上写了“**熟练使用缓存**”,但是被我问到“**缓存常用的 3 种读写策略**”的时候却一脸懵逼。
|
||||
|
||||
在我看来,造成这个问题的原因是我们在学习 Redis 的时候,可能只是简单了写一些 Demo,并没有去关注缓存的读写策略,或者说压根不知道这回事。
|
||||
在我看来,造成这个问题的原因是我们在学习 Redis 的时候,可能只是简单写了一些 Demo,并没有去关注缓存的读写策略,或者说压根不知道这回事。
|
||||
|
||||
但是,搞懂 3 种常见的缓存读写策略对于实际工作中使用缓存以及面试中被问到缓存都是非常有帮助的!
|
||||
|
||||
|
@ -250,7 +250,7 @@ public E removeLast() {
|
||||
return unlinkLast(l);
|
||||
}
|
||||
|
||||
// 删除链表中首次出现的指定元素,如果不存在该元素则返回 fals
|
||||
// 删除链表中首次出现的指定元素,如果不存在该元素则返回 false
|
||||
public boolean remove(Object o) {
|
||||
// 如果指定元素为 null,遍历链表找到第一个为 null 的元素进行删除
|
||||
if (o == null) {
|
||||
|
@ -27,7 +27,7 @@ IoC (Inversion of Control )即控制反转/反转控制。它是一种思想
|
||||
例如:现有类 A 依赖于类 B
|
||||
|
||||
- **传统的开发方式** :往往是在类 A 中手动通过 new 关键字来 new 一个 B 的对象出来
|
||||
- **使用 IoC 思想的开发方式** :不通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面过去即可。
|
||||
- **使用 IoC 思想的开发方式** :不通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面去取即可。
|
||||
|
||||
从以上两种开发方式的对比来看:我们 “丧失了一个权力” (创建、管理对象的权力),从而也得到了一个好处(不用再考虑对象的创建、管理等一系列的事情)
|
||||
|
||||
@ -53,7 +53,7 @@ IoC 的思想就是两方之间不互相依赖,由第三方容器来管理相
|
||||
|
||||
很完美,这种方式也是可以实现的,但是我们想象一下如下场景:
|
||||
|
||||
开发过程中突然接到一个新的需求,针对对`IUserDao` 接口开发出另一个具体实现类。因为 Server 层依赖了`IUserDao`的具体实现,所以我们需要修改`UserServiceImpl`中 new 的对象。如果只有一个类引用了`IUserDao`的具体实现,可能觉得还好,修改起来也不是很费力气,但是如果有许许多多的地方都引用了`IUserDao`的具体实现的话,一旦需要更换`IUserDao` 的实现方式,那修改起来将会非常的头疼。
|
||||
开发过程中突然接到一个新的需求,针对`IUserDao` 接口开发出另一个具体实现类。因为 Server 层依赖了`IUserDao`的具体实现,所以我们需要修改`UserServiceImpl`中 new 的对象。如果只有一个类引用了`IUserDao`的具体实现,可能觉得还好,修改起来也不是很费力气,但是如果有许许多多的地方都引用了`IUserDao`的具体实现的话,一旦需要更换`IUserDao` 的实现方式,那修改起来将会非常的头疼。
|
||||
|
||||

|
||||
|
||||
@ -63,7 +63,7 @@ IoC 的思想就是两方之间不互相依赖,由第三方容器来管理相
|
||||
|
||||
### IoC 和 DI 有区别吗?
|
||||
|
||||
IoC(Inverse of Control:控制反转)是一种设计思想或者说是某种模式。这个设计思想就是 **将原本在程序中手动创建对象的控制权交给第三方比如 IoC 容易。** 对于我们常用的 Spring 框架来说, IoC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。不过,IoC 在其他语言中也有应用,并非 Spring 特有。
|
||||
IoC(Inverse of Control:控制反转)是一种设计思想或者说是某种模式。这个设计思想就是 **将原本在程序中手动创建对象的控制权交给第三方比如 IoC 容器。** 对于我们常用的 Spring 框架来说, IoC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。不过,IoC 在其他语言中也有应用,并非 Spring 特有。
|
||||
|
||||
IoC 最常见以及最合理的实现方式叫做依赖注入(Dependency Injection,简称 DI)。
|
||||
|
||||
@ -132,7 +132,7 @@ public CommonResponse<Object> method2() {
|
||||
// ...
|
||||
```
|
||||
|
||||
使用 AOP 技术之后,我们可以日志记录的逻辑封装成一个切面,然后通过切入点和通知来指定在哪些方法需要执行日志记录的操作。
|
||||
使用 AOP 技术之后,我们可以将日志记录的逻辑封装成一个切面,然后通过切入点和通知来指定在哪些方法需要执行日志记录的操作。
|
||||
|
||||
```java
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user