面试题
人类幼崽养成记
知识分享,拥抱开源
展开
-
linux常用命令
一、基本命令1.1 关机和重启关机 shutdown -h now 立刻关机 shutdown -h 5 5分钟后关机 poweroff 立刻关机重启 shutdown -r now 立刻重启 shutdown -r 5 5分钟后重启 reboot 立刻重启1.2 帮助命令--help命令 shutdown --help: ifcon...转载 2022-02-22 14:52:21 · 201 阅读 · 0 评论 -
char 和 varchar 的区别,数据库索引B+树
char 和 varchar 的区别char(n) :固定长度,效率高;缺点:占用空间;存储固定长度的,使用 char 非常合适。varchar(n) :可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度。索引建立原则:在频繁使用的、需要排序的字段上建立索引。InnoDB 存储引擎的默认索引为 B+ 树索引 ,B+ 树只有叶子节点才存储数据,其他都是索引,B+ 树元素自底向上插入。B+树的特征:1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每.原创 2021-12-01 16:59:11 · 356 阅读 · 0 评论 -
Redis常用命令
字符串类型:String :set key value列表:List :表头 lpush key value1 value2[value…]表尾 rpush key value[value…]哈希类型:Hashhset key field value [field value …]集合类型:Setsadd key member[member…]有序集合:Zsetzadd key score member [score member…]Redis基础命令查看原创 2022-02-16 10:31:56 · 96 阅读 · 0 评论 -
sql优化
应尽量避免全表扫描在 where 及 order by 涉及的列上建立索引。在 where 子句中对字段进行 null 值判断在 where 子句中使用!=或<>操作符在 where 子句中使用 or 来连接条件在 where 子句中对字段进行表达式操作在 where 子句中对字段进行表达式操作in 和 not in 也要慎用模糊查询左边不要使用%.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update原创 2022-02-15 09:50:25 · 197 阅读 · 0 评论 -
Java中的list、set、map区别
List 有序,可重复ArrayList优点: 底层数据结构是数组,查询快,增删慢。缺点: 线程不安全,效率高Vector优点: 底层数据结构是数组,查询快,增删慢。缺点: 线程安全,效率低LinkedList优点: 底层数据结构是链表,查询慢,增删快。缺点: 线程不安全,效率高Set 无序,唯一HashSet底层数据结构是哈希表。(无序,唯一)如何来保证元素唯一性?1.依赖两个方法:hashCode()和equals()LinkedHashSet底层数据结构是链表和原创 2022-02-14 19:54:18 · 465 阅读 · 0 评论 -
Spring Boot 常用注解
@SpringBootApplication查看源码可发现,@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解@SpringBootConfiguration 注解,继承@Configuration注解,主要用于加载配置文件@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,原创 2022-02-14 18:00:26 · 146 阅读 · 0 评论 -
设计模式六大原则
目录设计模式的六大原则:单一职责原则开闭原则里氏替换原则迪米特法则接口隔离原则依赖倒置原则六大设计原则应用设计模式的六大原则:Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitution Principle:里氏替换原则 Law of Demeter:迪米特法则 Interface Segregation Principle:接口隔离原则 De.原创 2022-01-12 17:30:14 · 230 阅读 · 0 评论 -
Java枚举
本文转自Java 枚举用法详解知识点概念enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性。在Java中,被enum关键字修饰的类型就是枚举类型。形式如下:enum Color { RED, GREEN, BLUE }如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依次为RED:0,GREEN:1,BLUE:2。枚举的好处:可以将常量组织起来,统一进行管理。枚举的典型应用场景:...原创 2022-01-12 16:08:52 · 105 阅读 · 0 评论 -
如何保证缓存和数据库的一致性?
只要有引入缓存的地方,都不可能保证强一致性,所以这里的一致性是指最终一致性方法很多,最常用的就是延时双删,先删除缓存,再操作数据库,完事儿再删除一次缓存第二次删除缓存是为了避免在第一次删除缓存之后,到操作数据库完成之前,这期间有新的查询过来,导致再次把旧数据生成缓存...原创 2022-01-07 17:04:35 · 380 阅读 · 0 评论 -
#{} 跟${}的区别
#{}是预编译处理 ,可以防止sql注入 ,提高安全性 mybatis 会把sql中的#{}替换成? 调用PreparedStatement set方法赋值${}是字符串替换 mybatis会把${}直接替换成变量值原创 2021-12-29 15:01:43 · 161 阅读 · 0 评论 -
什么是Mybatis ?
使用JDBC连接数据库半自动持久层的ORM框架(因为要自己手写sql)可以使用xml配置,可以使用注解.优点:1.低耦合,sql重用,编写灵活 2.减少冗余代码 3.兼容数据库 4.能很好的与spring集成 5.提供映射标签,支持对象与数据库的ORM字段映射缺点:1.sql需要自己编写 2数据库移植性差...原创 2021-12-29 15:00:54 · 384 阅读 · 0 评论 -
start()和run()的区别
start方法:通过该方法启动线程的同时也创建了一个线程,真正实现了多线程。无需等待run()方法中的代码执行完毕,就可以接着执行下面的代码。此时start()的这个线程处于就绪状态,当得到CPU的时间片后就会执行其中的run()方法。这个run()方法包含了要执行的这个线程的内容,run()方法运行结束,此线程也就终止了。run方法:通过run方法启动线程其实就是调用一个类中的方法,当作普通的方法的方式调用。并没有创建一个线程,程序中依旧只有一个主线程,必须等到run()方法里面的代码执行完毕原创 2021-12-10 09:38:40 · 297 阅读 · 0 评论 -
String、StringBuffer和StringBuilde的区别
StringBuffer 和 StringBuilder 类提供了操作字符串的方法。String为字符串常量,即String对象一旦创建之后该对象是不可更改,final 修饰,可以被不同线程共享,是线程安全的。在涉及多线程操作中不需要同步操作。StringBuilder和StringBuffer均为字符串变量,是可以更改的StringBuilder是线程不安全的,StringBuffer是线程安全的,StringBuffer中很多方法可以带有synchronized关键字...原创 2021-12-08 17:17:10 · 303 阅读 · 0 评论 -
线程的生命周期
线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、死亡。新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。Thread t1=new Thread();就绪(runnable)调用start()方法后,JVM 进程会去创建一个新的线程,而此线程不会马上被 CPU 调度运行,进入Running状态,这里会有一个中间状态,就是Runnable状态,你可以理解为等待被 CPU 调度的状态t1.start()运行(ru..原创 2021-12-08 17:04:12 · 210 阅读 · 0 评论 -
JVM垃圾回收
GC是垃圾回收, 垃圾就是无任何对象引用的对象,回收占用的内存空间而非对象本身因为程序不断运行,不断有新的对象产生,为了避免无用对象的存在从而占用内存空间导致内存不足,因此要进行回收当新生代满时触发Young GC,当老年代满时触发Full GC/Major GC4种引用状态分为强引用、软引用、弱引用、虚引用4种,这4种引用强度依次减弱GC的两种标记方法1.引用计数法引用计数算法实现简单,效率高;不能解决循环引用的问题,导致内存泄漏对于一个对象A,只要有任何一个对象引用.原创 2021-12-08 16:49:03 · 172 阅读 · 0 评论 -
JVM 组成部分
JVM可以分为3大部分:类加载器,运行时数据区和执行引擎。类加载器负责加载.class 文件运行时数据区负责存放.class 文件,分配内存。运行时数据区又分为5个部分:方法区:负责存放.class 文件,方法区里有一块区域是运行时常量池,用来存放程序的常量。 堆:分配给对象的内存空间。 java虚拟机栈:每个线程独享的内存空间。 本地方法栈:本地方法独享的内存空间。 程序计数器:记录线程执行的位置,方便线程切换后再次执行。执行引擎:.class文件是jvm的一套指令集规范,并不能直接原创 2021-12-08 15:23:09 · 560 阅读 · 0 评论 -
类加载器分类
类加载器干就是将对应类的.class文件中的二进制流加载到内存空间类加载器的分类1.启动类加载器2.扩展类加载器3.应用程序类加载器委托机制:双亲委派模型当一个类加载的过程中,它首先不会去加载,而是委托给自己的父类去加载,父类又委托给自己的父类。因此所有的类加载都会委托给顶层的父类,即Bootstrap Classloader进行加载,然后父类自己无法完成这个加载请求,子加载器才会尝试自己去加载。使用双亲委派模型,Java类随着它的加载器一起具备了一种带有优先级的层次关系,通过这种层原创 2021-12-08 14:40:41 · 543 阅读 · 0 评论 -
JVM 类加载机制
类加载主要分为5个过程:加载、验证、准备、解析、初始化,其中验证、准备、解析统称为连接过程。JVM把class文件加载到内存,并对数据进行校验、准备、解析、初始化,最终形成JVM可以直接使用的Java类型的过程。加载:将class字节码文件加载到内存中,并将这些数据转换成方法区中的运行时数据(静态变量、静态代码块、常量池等),在堆中生成一个Class类对象代表这个类(反射原理),作为方法区类数据的访问入口。验证:主要目的是为了确保 Class 文件的字节流中包含的信息是否符合当前虚拟机的原创 2021-12-08 14:26:43 · 493 阅读 · 0 评论 -
Java 中创建对象方式
1.使用new关键字2.反射,使用 Class 类的 newInstance 方法,调用无参的构造器创建对象3.使用Clone的方法,必须先实现Cloneable接口并实现其定义的clone方法4.反序列化,实现Serializable接口原创 2021-12-08 11:42:55 · 59 阅读 · 0 评论 -
final、finally、finalize 的区别
final:java中的关键字,修饰符。用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、被其修饰的类不可继承;finally:java的一种异常处理机制。异常处理语句try-catch代码块中结构的一部分,表示总是执行;finallize:Java中的一个方法名。Object类的一个方法,在垃圾回收时会调用被回收对象的finalize(),供垃圾收集时的其他资源回收,例如关闭文件等。...原创 2021-12-08 10:50:24 · 272 阅读 · 0 评论 -
HashMap和ConcurrentHashMap
HashMap:线程不安全,不支持并发操作,键-值(key-value)都允许为空、、不保证有序HashMap底层是通过链表来解决hash冲突的。数据结构JDK1.8之前:数组+链表JDK1.8之后:数组+链表+红黑树ConcurrentHashMap:线程安全,支持并发操作,键-值(key-value)不允许为空源码:数据结构JDK1.8之前:数组+数组+链表,JDK1.8之后:数组+链表+红黑树...原创 2021-12-08 10:39:01 · 382 阅读 · 0 评论 -
ArrayList和LinkedList 的区别
ArrayList:非线程安全的集合,基于动态数组,查询快,因为ArrayList直接通过数组下标直接找到元素增删慢,新增和删除元素时需要扩容和复制数组(非极端情况)LinkedList :非线程安全的集合,基于双向链表增删快,新增和删除元素时,只需要改变对象的引用即可查询慢,查询时需要遍历每个元素,这样就会比较的慢...原创 2021-12-08 09:37:53 · 171 阅读 · 0 评论