- finally #card #java id:: 6681f589-6a14-444d-a531-757106bbf639 - java关键字之一,用于构建try-catch-finally语句块 - 用于释放资源,关闭连接等 - finally中的内容会在try和catch结束前执行 - final #card #java id:: 6682075e-9092-45f4-84e3-f72b327cc464 - java修饰符关键字 - 可以修饰变量,类,方法,修饰后的变量不可以被修改,方法无法重写,类无法继承 - finalize() #card #java id:: 668207bd-e4ba-4c6a-a834-9cfd0578a36d - Object中的一个方法 - 当对象要被回收时会被调用,执行一些资源清理的操作 - 调用的时间是不确定的 - 手写单例模式 #card #java id:: 66820808-c5d5-4c44-a5f3-f6273725469d - 饿汉式 - ```java public class Singleton { private static Singleton instance = new Singleton() private Singleton() {} public static Singlton getSingleton() { return instance; } } ``` - 懒汉式 - ```java public class Singleton { private static Singleton singleton; private Singleton() {} public synchronized static Singlton getSingleton() { if (singleton == null) { singleton = new Singleton(); } return singleton; } } public class Singleton { private volatile static Singleton singleton; private Singleton() {} public static Singlton getSingleton() { if (singleton == null) { synchronized (Singlton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } } ``` - 用了redis哪些数据结构 #card #java id:: 66820850-48cc-4bde-8ec6-8ca8ce5d42e0 - string,存验证码,缓存常用的一些数据 - hash,存储一些购物车内容 - redis持久化机制 #card #java id:: 668208e5-41ef-4991-afd2-d5df1d2756c3 - redis持久化分为RDB和AOF - RDB - 存储的是某一时刻内存的镜像副本 - 对内存占用要求高,创建副本的时候需要有一半的内存 - 创建的速度较慢,但恢复的速度快 - AOF - 日志追加的方式,可以设置不同的频率,no(操作系统决定,一般30s),1S,Always - 存储的不是数据,而是操作命令 - 存在重写的过程,实时性较好,恢复的速度较慢 - redis事务 #card #java id:: 668208f6-0350-45ac-bb04-85535ee0896c - 原子性,可以让一组命令同时按照顺序执行 - 没有回滚以及隔离,出错后出错的命令不会执行,其他命令都会执行 - 需要配合lua脚本来保证执行的时候没有其他命令或lua脚本插入执行 - redis单线程问题,哪个版本开始有多线程 #card #java id:: 668208f9-c6bd-40fb-a7a0-be5ce340ae11 - 使用单线程可以避免线程间上下文切换带来的额外开销 - 6.0引入来IO多线程,但是主线程还是单线程 - java8跟7有什么变化 #card #java id:: 66820c02-dee3-452d-b1b5-aaab582973ba - completeablefuture - locadatetime - stream流 - optional类 - concurrentHashMap - 红黑树 #card #java id:: 66820c48-c30b-464c-8495-87b6b1d6a796 - 一种自平衡的二叉树 - 可以加快查找元素的速度,但是插入的速度由于需要自平衡会变慢 - 如何让线程进入等待,有哪些方法 #card #java id:: 66820ddc-9987-47fb-a46a-59d5a65849ea - 使用wait和sleep方法 - wait和sleep的区别 #card #java id:: 66820eb0-ea1d-47bd-96d5-a9684c00d5da - wait会释放锁,放入wait等待池中,等待notify和notifyAll唤醒,唤醒后再重新竞争锁 - sleep不会释放锁,睡眠期间不会占用CPU资源,等待时间到达后继续执行 - 常用的线程池 #card #java id:: 66820f2e-58df-4ba4-b3a2-39d34ddb3e9d - SingleThreadPool - FixedThreadPool - ScheduleThreadPool - CachedThreadPool - ForkJoinPool - JVM组成 #card #java id:: 66820f8d-4a88-4fe1-bb77-fb264f076bea - 程序计数器 - 虚拟机栈 - 本地方法栈 - 堆 - 元空间 - 直接内存 - 栈溢出 #card #java id:: 66820c5d-2657-4a7a-a5c6-57195aafd0f8 - 递归 - 方法深度超过栈容量 - 对象过多,栈空间不足 - mysql 常用数据库引擎及区别 #card #java id:: 66821082-95b1-4235-b0e1-af72a37bbd91 - InnoDB - 支持事务,可靠性较好 - 性能较好,可以提供表锁和行锁 - 支持聚簇索引 - MyISAM - 不支持聚簇索引 - 只有表锁 - 不支持事务 - 索引原理实现 #card #java id:: 668210e1-3980-42b5-ab90-e6c60a7933ba - 用于快速查找需要的数据 - 使用B+树索引,是一种多叉树,非叶子结点不存储数据,因此比B树的高度要更低,同时叶子节点之间使用双向链表连接,支持范围查询 - 非聚簇索引存储的是主键ID,查询的时候可能需要回表,如果索引覆盖就不需要回表 - 复合索引需要符合最左匹配的原则,否则会导致索引失效 - SQL执行顺序 #card #java id:: 66821224-5909-4718-b0f5-9a0b64fa481c - select a,b from A B left join where group by having order by limit - union和union all的区别 #card #java id:: 66821254-3fb9-4a9e-80eb-1990331f3cfd - union不会去重复,union all会去重,union性能要更好 - spring 解决循环依赖问题 #card #java id:: 66821307-e75e-4283-9fa6-a6b431c4c83d - 使用三级缓存架构,解决循环依赖 - 第一层存放EarlySingletonFactoryObject - 第二层存放EarlySingletonObject - Spring Bean的原理 #card #java id:: 66821391-077f-4f2b-bb65-e5e35ff03f7c - Spring Boot的注解 #card #java id:: 668213a0-1a80-4678-8619-9cf5e57e1d98 - Bean - Controller,RestController - Service - Compoment - Repository - Spring Boot自动装配原理 #card #java id:: 668213d3-a4d1-451a-98b6-6fbb9972f2bb - Spring Cloud组成 #card #java id:: 668213ea-48fa-4892-9db5-a6bb3bd3d84d - 负载均衡如何配置 #card #java id:: 668213f7-38a9-4690-b10d-8e8a2a67162f - 网关如何转发请求 #card #java id:: 668213fe-e07d-4e5e-9f57-3c863eda3d40 - 意想不到的方面 #写作 {{renderer :wordcount_, 1000}} - 今天,学习到了一个非常重要的观点,就是自学的过程当中什么最重要,很多人可能回去考虑兴趣,但是其实兴趣根本不是最重要的东西,最重要的是逼迫自己去学习,其实并不是因为有兴趣所以才学得好,而是因为学得好才有兴趣,这个观点在以前看过的[[把时间当作朋友]]这本书里面就已经有了,但是当时却并没有发现这是个多么重要的东西,导致了我自从看过了书后的学习过程都没有去考虑这件事情,这就是导致我这些年来学习东西结果最终都是一无所成,并放弃之前的所有努力的原因,因为我没有去逼迫自己学习,这就是我没有做到的事情,假如我可以做到这件事情,那么自己也许早就掌握了英语,掌握了编程这些对我的发展至关重要的技能,也就不会像现在这样过得生活艰辛了。 - 这就是没有掌握思考能力所导致的后果,没有思考能力也就没有了判断能力,进而在作出一些重要的选择的时候就容易被他人影响,进而选择了那个并不利于自己发展的方向,渐渐的,生活的质量也随着这些没有思考的行为而受到改变,丧失思考能力,就会错过许多东西,错过了时间和注意力这些是最为可怕的,因为时间和注意力没有投入到有意义的生产学习活动中来,导致花费了时间可是最后的结果却是一无所成,渐渐的,自己也变得麻木了,变得失去信息,不再笃信自己可以变得更好。 - 综合这些年的经历来看,没有改变自己也就是在这些意想不到的方面没有做到,而这也就是自己这些年来命中注定的结果, {{embed ((6657dbf7-5e35-46ba-8ecb-22be182d81a2))}},想要和别人不一样,那就要有与别人不一样的改变,这些改变才是最终可以导致我们变得更好的关键,但是这些不同之处往往其实都是我们意想不到的地方,毕竟,如果人人都可以想到这些东西,那么久没有什么独特的地方了,那这些就还是和其他一样都是任何普通人都在做的事情了。 - 我们总是被我们自己的思维所困住,并且在日常的学习工作中,我们渐渐的培养成了一个放弃思考的人,学习可以找资料,但就是不动自己的脑子,工作可以按照流程,因此也可以不用动用自己的大脑,仅仅按照机器那样的流水线操作即可,很多时候我们都在厌倦工作这种重复的无意义的劳动,但是我们又不愿意去思考,毕竟没有思考怎么会有其他的改变呢,要改变自己实在是一件太难的事情了,难到超出了我们的想象,毕竟现在社会阶层固化,想要跨越阶层实在是一件不可能的事情。很多时候,我们的思维就这样被这些思考所限制住了,慢慢的,我们开始认命,开始放弃挣扎,并最终变成了一个不愿意改变自己,只愿安于现状的普通人。 - 重视生活中所找到的所有意想不到的东西,正是这些东西给我们的思考和做事方式带来了改变,进而让我们变得和他人不一样,并最终过上不一样的生活。==切记,永远不要固化自己的思想,打工永远是最低级的赚钱方式,要改变自己,改变自己的赚钱方式,重视自己的学习,逼迫自己去自学,不要任何事情都依靠兴趣,依靠兴趣的最终结果就是能够是限制了自己。== - -