有没有教做蛋糕的网站,给女友做网站,wordpress网站模版,wordpress简洁主题学习方法
学习、整理笔记过程中#xff0c;顺便整理出一个以问题为模版的大纲#xff0c;到时候对着问题#xff0c;就像是在和面试官讲解那样#xff0c;相当于升级版的费曼学习法
除了看博客#xff0c;问gpt外#xff0c;亲自实验也是获取知识及加深印象的关键点
很…学习方法
学习、整理笔记过程中顺便整理出一个以问题为模版的大纲到时候对着问题就像是在和面试官讲解那样相当于升级版的费曼学习法
除了看博客问gpt外亲自实验也是获取知识及加深印象的关键点
很久没有复习的知识不要上来就去读一遍而是先从大脑中过一遍想不起来的或者想错的就是之前没有掌握扎实的内容尽快巩固一下
java基础语法
语法与概念 this和super概念、构造器中的用法、普通方法中的用法、静态方法中能否出现抽象类中出现是指什么 面向对象三大特征封装(实现手段、好处、与jvm关系、实际开发)、继承(概念、子类构造器super概念与jvm角度是否真的先创建父类对象)、多态(概念、三要素、结合模板方法) try-catch-finally 练习题的形式考察返回顺序、异常链、拦截器/aop异常捕获增强方法 java基础数据类型、Intger的拆箱与装箱 String不可变性、基本结构 final 泛型集合项目 重载(方法名同参数个数不同类型参数顺序不同、返回值类型权限无关)与重写(2同2小1大说明底层原因结合模板方法模式、jvm角度分析)向上转型与向下转型重载的典型案例如下 案例一子类具有和父类同名的属性setter做重载getter无法重载用泛型方法将父子setter方法合二为一案例二泛型类的方法入参由于编译期间泛型擦除机制在后无法被作为重载的解决方案 重载方法入参升级/入参降级保持非一致即可重载方法合二为一之通过泛型通配符重载方法合二为一之反射映射机制 静态为何静态方法中不能出现非静态属性/方法 接口与抽象类的区别 本质关系与概念、构造方法 流概念、分类(方向、功能)、既然java中有自动GC的功能那么为何在finlly块中还要再去手动close 泛型 生效时机与泛型擦除泛型作用范围 泛型类集合则是限定添加元素的类型业务类的泛型泛型方法真泛型方法T与伪泛型方法T区别一个自助决定返回值类型且不要求一定是泛型类泛型方法所在类必须是泛型类泛型属性要依附于泛型类包括pojo和collection泛型接口 继承类继承的泛型接口传入实参和未传入实参的区别传入实参那么重写接口的方法和属性必须限定为传入的实参没传入那么这些则不受限定会在创建对象时决定 泛型通配符作用泛型方法应用案例 参考重载的典型案例一、案例二限定接口返回值高端应用①定义基层父类所有的入参reqVo都继承自这个基层父类BaseReqVo②生产者端接口统一接收map类型的入参而后在接口中调用service基类对象分发入参到相应的生产者service基类service是泛型类但泛型参数限定为BaseReqVo的子类分发过程中在接口处对入参map做了处理
T t JsonUtils.toBean(JsonUtil.parseFromMap(XxxReqVo),getObjectClass());这一步中T会在编译过后被编译为BaseReqVo而T右边实际上则是具体的XxxReqVo对象 Json而后在对应的生产者service转型为对应的reqVo③通过kafka推送这个reqVo④消费者端的监听器调用消费者端的service基类分发入参消费者基类service中的T和生产者service中的T一样消费者基类service中模版方法中直接用t而后在模版方法中的小方法中handle等小方法时这些放都是延迟到子service去实现的当然子service继承的消费者基类service中是声明具体泛型类的(XxxReqVo)入参后handle后会通过泛型自动转为具体的reqVo⑤消费者端的
异常 可查异常不可查异常(RuntimeException与Error)
java与io
io的概念、分类方向、功能、类型流的概念、三大特征对比块输入流与输出流、字节流与字符流、节点流和处理流与缓冲流案例实操程序读取文件、 程序写入文件、 程序实现文件复制
java集合
ArrayList和LinkedList简介和区别 底层、查询、顺序添加、插入、扩容(原理)、实际应用(增删改查扩容角度)
hashmap(数据结构算法并发锁)
基础问题hashmap数据结构、hash算法实现细节、插入算法、扩容装载因子(0.75平衡扩容和数据聚集)、扩容的触发机制、底层实现原理、 尾插法 头插法线程安全问题、红黑树的特点、树化条件、hash冲突定义HashMap的底层数组长度为何总是2的n次方①插入算法(方便用计算)②扩容时用到③尽量保证结点均匀jdk8新特征红黑树(解决查询效率对比avl)、尾插 头插法、节点Entry Nodejdk8之前的线程安全问题如何高效运算保证均匀性的hashmap怎么解决哈希冲突的hash冲突定义链地址法(数据结构)红黑树(树化)、插入算法(保证均匀)、扩容机制线程安全问题jkd8数组节点被覆盖、jdk7扩容过程中线程问题(头插法 尾插法)concurrentHashmapjdk7前分段锁、jdk8的CASsynchronize
java线程
线程与进程jmm内存模型java线程的状态与转换、深入谈下线程、cpu、新建 就绪、就绪 运行、运行 挂起/阻塞线程安全问题定义与起因(内存安全)常见的线程安全情况、i、集合类hashmap、stringbuilder、局部变量为何线程安全synchronize三种应用(修饰代码块、修饰方法;访问实例对象访问静态对象)、对应的底层原理(对象锁、抢占到的执行未抢占的阻塞)、jdk6之后对synchronize做的优化、关联问题 slepp和wait的区别java常见的锁的类似与举例为什么要引入分布式锁项目中使用到的分布式锁(三类场景选择chatconnect接口情况讲解、底层原理setnx、kv的选择与含义、)线程安全三要素与atomic原子类、volitate的关系线程池 设计理念①相较于单线程减少了线程关闭和创建的流程线程执行效率更高②统一管理线程线程利用率更高同时防止线程资源被过度使用导致系统资源不足 常用线程池类型 单例线程池①大部分用于做一个异步操作例如我们接口中有一个void类型的远程调用而且这个流程和主流程业务上并没有强依赖即不要求状态必须保持一致即不一定要同时成功或同时失败的情况下可考虑(例如推送数据到kafka)否则业务上可能存在风险不支持异步②特殊业务场景即常规线程池①异步只是对于请求量大的接口无法满足1对1要加一个最大限额此时要用线程池这种情况下通过线程池都是静态的或者该线程池所对应的当前服务器上所有的请求的异步流程都②常常是mysql数据处理相关的in范围查询是如果查找的范围数量有上千个那么我们通过List.paritation将一整个list集合拆分为多个最大容量为300的list而后使用线程池每个线程用一个list做条件开启一个sql查询 参数与含义循环执行50次任务等价于50个任务/一瞬间来了50个请求一个请求的执行时间200ms左右核心线程数5意味着前5个线程被投入使用大小为20的等待队列存储20个等待状态的任务其中如果不主动指定等待队列的大小那默认就是2的32次方那意味着即使当前并发请求任务数等可以暂时存放在等待队列中不会触发拒绝策略最大线程数10意味着(10-55)5个临时线程被投入使用(临时线程)最大存活时间1、单位秒即1秒内没有超出核心线程数外的任务请求过来就会释放掉非核心线程线程工厂四种拒绝策略之一①abortPolicy拒绝并中断中断是通过抛出异常中断当前②discardPolicy直接拒绝③discardOldestPolicy把最早的请求的丢弃④callerRunsPolicy,不会抛弃多余任务但会使线程的创建线程即主线程也会被投入执行线程任务这种情况下可能原本线程池是异步执行的效果会失效从整个流程角度看还是串行
java数据结构
B树与B树AVL树与红黑树java集合
java设计模式
聚合、组合、继承简单工厂、工厂方法、抽象工厂各个模式的优点与缺点实现细节层层推推进代理模式jdk动态代理源码分析 为被代理类Xxx创建XxxInvocationHandlerT其中该类中一个属性持有被代理类对象并通过构造器赋值重写invoke方法该方法三个入参分别是proxyinterfaces的class类型、invocationHandler方法中通过入参的method.invoke去执行核心业务方法而后在核心业务逻辑的四个位置做增强处理该方法其实本质是通过在类运行期间在编译期间生成字节码文件转为java类$Proxy(继承自Proxy同时实现被代理类的接口)该类(静态)属性是Method类型在静态方法中通过反射获取被代理类中的全部放的method并赋值给属性$Proxyz中通过构造器入参将invocationHandler赋值到父类$Proxyz中会有被代理类中的同名方法但方法内容清一色是通过this.invocationHandler.invoke(this,method,null),即去调用invocationHandler的代理方法
spring面试题
1spring bean的生命周期基础
概念总览创建属性填充/依赖注入初始化使用销毁创建的三种形式Supplier/工厂方法/推断构造并反射创建推断构造器方法工厂方法举例(Spring整合mybatis配置类中的Bean创建过程细分实例化,bean后置处理半成品bean存入三级缓存属性填充AutoWiredResource初始化流程aware回调各种初始化方法initializeBean的afterProperties
2spring的生命周期进阶 - 循环依赖
什么是循环依赖一二三级缓存的作用分别什么是什么它们是如何搭配解决循环依赖的呢循环依赖不适用于什么场景构造注入Asynwhy
3Configuration
容器启动过程中对该注解的处理逻辑是什么最终生成一个什么样的beancglib动态代理实例化配置中的bean时的过程是什么
4ComponetScan 说一下处理流程
5依赖注入AutoWired
自动注入的模型的三层结构师什么有多个实现的子类是如何选择注入对象的? 我们可以通过AutoWired中指定beanName来根据名字注入对象这与Quailifiers区别是啥
工厂方法定义哪些常见的用法 Spring ioc和aop Spring是线程安全的吗Sprin Spring中的单例和传统单例模式区别 ApplicationContext(和BeanFactory事件监听器、国际化类文件读写解析)和BeanFactory(ioc的核心定义、初始化、实例化、依赖注入、全套声明周期关系)延迟加载好处与坏处 常见报错XxxMapper has bean register MapperRegister Spring创建bean的12种方式流程 beanPostProcesser 执行时机 容器启动过程中全部的后置处理器被装载到一个list中实例化bean的过程中执行完依赖注入开始初始化bean的时候①回调aware接口的实现类方法②执行init方法③执行beanPostProcesser的前置处理和后置处理常用的后置处理器有哪些常见用法功能是什么在对应的执行时机中对bean做后置处理通常是对bean做一些争抢处理例如①RountingInjected案例根据名称在同类bean选择对应的bean并将其封装为代理类同时aop中的代理类的创建也是在这一流程中创建的之所以在此次创建戴丽丽时因为类的初始化和实例化都已完成②完成配置文件的属性值绑定 InitializingBean执行实际实际开发中的应用策略模式的实现相关 实例化bean的过程中执行完依赖注入开始初始化bean的时候①回调aware接口的实现类方法②执行init方法用于策略模式的实现即一系列service组件作为策略类不需要定义一个策略类后去手动注册也不需要直接拿spring容器做策略类而是通过策略模式直接自动注册这个bean到策略容器中 autowired注解 修饰范围属性、构造器、方法、以上三者的参数中注入策略 byType byName和Resouce注解的区别修饰范围不同、指定beanName方式不同、装配策略不同、适用框架的范围不同 Spring容器启动和获取到组件的全过程 ApplicationContextRegister、常用的两个场景 spring事务底层原理、事务传播机制、事务失效原因 spring循环依赖概念、循环依赖出现在不同位置的情况与每种位置对应的spring提供的解决方案 componet和service区别一个修饰service层一个修饰普通的javapojo类型的java类相当于配置文件中配置的javabean我认为是一种规范性层面的差距并无实际功能性的差异功能一样的 模拟Spring整合mybatis全流程相关组件注解WangScanWangScannerWangBeanFactoryWangBeanDefnitionImpory BeanUtils.copyProperties解决的痛点是什么具体应用说一下 两个无关的对象做属性值拷贝两个父子类对象做属性值拷贝两个带有pojo/collection类型的属性 该方法是深拷贝还是浅拷贝
jvm
介绍下jvm内存空间模型、程序计数器、虚拟机栈、堆、方法区
关联问题1详细说下堆的结构为何那么划分
类加载流程加载编译加载、连接验证准备解析、初始化过程
关联问题1配置文件中静态字段accessSecre一定就是test吗accessSecret2一定是test2吗
Value(${bos.accesskey2})private Long accessSecret2 “test2;关联问题2说一下ClassNotFondException与ClassNoDefineError的区别
关联问题4类加载过程是一口气把所有类都加载吗加载后的类都会被初始化吗 关联问题5字节码的执行时机是什么 关联问题6import一个类是不是意味着类加载器会加载这个类 关联问题6如果我使用了一个类的class对象那么这个类一定会被加载 关联问题7: ASM读取.class文件和jvm字节码解析区别是什么
类的主动调用被动调用
关联问题1: clinit含义一定会执行吗静态属性一定会意味着clinit吗final出现static fianl一定只是在连接阶段赋值吗字面量/数值类型变量的区分
双亲委派机制
关联问题java.lang.String模拟与feign的消费者类ConfigureMapper覆盖 class对象生成实际 栈、堆、方法区的内存泄露与OOM概念、与它们的常见的情况 String通过号拼接和通过StringBuilder拼接哪个好还有优化空间吗 GC的整体流程、GC为何要分区 强引用、软引用、弱引用 线程安全与jvm内容 虚/非虚方法、动态连接、静态连接 this和super重载与重写、特殊情况private/final/abstract指代静态上下文关系类主动/被动加载案例java构造方法底层原理与this/super关系子类构造器初始化 加载父类的流程jvm底层原理、clinit和init的关系java代码执行顺序
内存泄露
内存泄露定义
常见的内存泄露情况5种
ThreadLocal与jvm
threadlocal
问题1: JAVA基础 - 强引用、弱引用、软引用、虚引用
问题2:说下ThreadLocal与Synchnroized区别
问题3:说下ThreadLocal的使用场景
问题4:ThreadLocal为何要用弱引用
String与jvm
String的定义String内存模型解释String的不可变性和final有关吗为何要设置为final如果不是final会出现什么问题
String的拼接操作底层原理是什么与final的结合使用呢
kafka
项目中为何使用kafka基础架构(核心组件、分区数规则(数目到底多少合适数据不合适的坏处)、副本数规则、分区与副本关系)生产者请求ack机制、丢消息问题、消息重复问题/幂等性与事务机制数据乱序到底怎么样数据才是安全的 消息确认问题诞生的ISR机制生产者数据推送策略kafka与zookeeper的关系存储关系服务器节点启动流程的关系、启动后如何生效去zookeeper化如何进行的消费者端偏移量kafka底层存储文件机制消费者pull/push
IO模型与Netty
ES 概念基于 Lucene 的 Restful 的分布式实时全文搜索引擎基于倒排索引即每个字段都被索引并可被搜索可以快速存储、搜索、分析海量的数据 基础架构 倒排索引 常用api总结下 text 和 keyword类型的区别 query 和 filte r 的区别 es数据写入与读取流程
mysql
mysql基础
group by,order by,limit,in,left join… 语法部分统一挪到索引部分讲解mysql基础架构(结合sql命令)server层连接器、缓存层、分析器、优化器执行器(预处理器解析符合、优化器选择索引 执行器索引下推)count(*)/count(列明)/count(1)/count(0)区别每个命令最适合的场景
详细介绍下五种连表的方式
讲一下范式
如果让你设计一个请假表你会如何去设计
基础语法题
跨多表的字段查询三表连接查询/表连接查询子查询集合 join A ON B where A.id B.id 按xxx统计后以统计条件为分组查询语句group by、结合having和count等聚合的关系 一个表内一个对象的某属性进行比较单表拆分为连在一起的双表需要对比的两字段被练成一行用于比较通过两个子查询后通过where获取到连接表连接表中有了这个
char和varchar区别如何选择
索引、性能调优相关
mysql执行顺序
驱动表和被驱动表的定义是什么mysql优化策略是如何选择驱动表与被驱动表的主表一定会被作为驱动表吗
什么是索引说一下索引B树的结构三层B树能存储数据的上限是什么可以使用avl树或者B树代替B树吗B树为何擅长范围查询
主键的选择有哪些限制为何不能过大为何不能用随机数为何要唯一性、非空性
说一下外键索引、唯一性索引外键索引一定会提高查询性能吗
联合索引的好处是什么如果没有联合索引是什么情况缺字段导致索引失效、范围查询导致索引失效的原理是什么联合索引对or语句有效吗如果我们想对or语句创建索引要怎么做
模糊查询为何导致索引失效底层原理是什么模糊查询一定会失效吗如何解决失效问题
说一下order by的原理参考sql如下order by索引失效的场景有哪些如何针对此类sql创建高效索引,参考sql如下,说一下六种加索引的方法无索引只对name加索引只对city加索引对name和city加索引对namecity以及select的字段加索引对city和name字段加索引
select city,name,age from t where city 杭州 order by name limit 1000;说一下group by的原理group为何会导致文件内排序与临时表参考sql如下
select city ,count(*) as num from staff where age 30 group by city;说一下limit原理为何不能非叶子快速定位呢
文件内排序与使用临时表的定义是什么什么情况下会出现这种呢
适合创建索引的情况有哪些不适合的有哪些
还有其他索引失效的场景吗列举一下失效的原理是什么你该如何解决这些索引失效问题
联合索引字段缺失、范围查询导致字段部分失效对于OR条件失效设计到group by/order by 索引顺序不正确也会导致索引失效模糊查询导致索引失效使用函数导致索引失效
索引的优缺点是什么所以哪些情况适合哪些情况不适合呢
重点说下连表查询原理(粗暴n重循环、缓存辅助、索引辅助连接(主外键连接))、左/右/全/内连接原理、连表例题、阿里规范禁止三表以上连接joinwhyhow
连表场景 主键作为外键没有外键盘分组与排序原理不加索引的坏处加了索引的好处?为排序加索引注意点where筛选注意点索引是否覆盖字符类型索引创建字段注意点、区分度算法模糊查询注意点索引顺序有何讲究(区分度排序)?索引失效情况 * 传统分页(limit)为何效率低优化方案有哪些(between and替换、延迟关联法、游标分页法) * in和exists区别范围查询 那些情况适合索引呢 介绍常见的索引级别与其对应的场景system/const/eq_ref/ref/range/index/all,开发注意点 extra常见字段? Using filesort/Using temporary/Using index/Using where/Using index和where/Using index condition/ using intersect/using union/NULL innodb和myisam的区别、锁 事务 外键行数统计、聚簇索引数据结构 存储结构存储文件 对主键的要求、全文索引 索引的优缺点,读写方面资源占用、 主键索引对主键的要求 常见适合创建索引的情况 mysql性能优化五大原则 常见索引失效的情况
mysql 锁
mysql锁原理
锁的分类 细粒度(myisam与innodb表锁 元数据锁、innodb页锁、innodb行锁行锁)、是否互斥(共享/排它锁)、乐观/悲观锁、间隙锁 临建锁 插入意向锁的、行锁与意向锁、隐式锁和显式锁分别讲解这些锁为了解决什么痛点如何去解决的细粒度和并发度的关系、如果关闭间隙锁
mysql并发问题、事务隔离级别、锁 事务的概念与acid mysql常见并发问题(脏写、脏读、不可重复读、幻读)与对应的隔离级别(读未提交、读已提交、可重复度、串行化含义)、五种读的 * 隔离级别与快照读/当前读之间的关系RR/mvcc级别是否彻底解决幻读 * innodb和myisam锁机制的区别为何innodb能支持行锁的底层原理使用行锁的注意点 * 行锁原理RC/RR级别用id主键列单列与范围操作RC/RR级别用二级唯一索引列单列/范围操作RC和RR用二级非唯一索引单列/范围操作RC和RR用非索引单列/范围操作 * 表锁存在的意义/用法行锁存在意义/有点
* 间隙锁要解决什么问题特点是什么为何伴随死锁如何解决死锁插入意向锁要解决什么问题
间隙锁类型划分唯一索引的间隙锁和普通索引的间隙锁区别、普通索引又要划分尾插和随机位置插入的区别 * 死锁* 锁结构mysql分表分库 垂直分库概念垂直分表概念、案例、水平分表概念、案例、方案 额外 mysql和es区别交互式条件查询 mysql无法动态创建索引模糊查询 mysql不支持全模糊和左模糊、存储非关系型数据 mysql只能支持关系型
为什么mysql字段要使用NOT NULL
mysql表设计
设计一个工资表
疑问点RR级别二级唯一索引未命中超出索引最大值范围n为何要在二级唯一索引 (n,oo)加锁 RR级别使用主键索引单行查询n位于主键值a到b未命中为何在区间(0,a),(a,b)加间隙锁 RR级别使用主键索引做范围查询小于n的范围mysql中大于n的临间值n2为何会有(n,n2]的临建锁
mysql更新操作 依赖索引 否则锁全表虽然在server层会释放无关行但会浪费大量锁资源影响系统并发度
Redis
数据结构与每种结构的用法
Redis事务
为何效率高IO多路复用、单线程、基于内存、kv内存型数据库
缓存击穿、缓存雪崩、缓存穿透
缓存击穿的概念解决方案解决方案中可能存在死锁通过设置过期时间解决死锁注意点有哪些增加过期时间可以完美解决死锁问题但这会不会导致其它问题吗
缓存穿透概念解决方案
缓存穿透的概念 解决方案
redis中setnx命令的底层原理是什么?有什么应用场景? 原生的setnx存在哪些问题
热点key定义、如何发现(服务器代理层日志、设计预期、经验)
redis与mysql双写一致性问题
常见的redis模型有哪些重点聊一下边路器模型为什么我们开发中最常用的是边路器模型或者说边路器模型的写流程为何要先更新数据库再去删除缓存为何一定要删除而不是去缓存边路器的写模型也会存在数据不一致的风险吗如果解决缓存双删
redis实现分布式锁
分布式锁如何实现原理是什么setnx原理key是前缀业务idvalue是线程id含义是
分布式锁的业务场景
redis做分布式锁有哪些常见的问题
redis应用场景
redis事务
Springcloud
springboot和springcloud区别利用springboot开发简便性、服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控定义多个服务多进程(1对1)
maven
九大生命周期
cleanvalidatecompiletestpackageverifyinstalldeploy
父项目遵守的规范
properties dependicesManagment、包括javaversion和projectversion继承springbootmodules
各个标签的左右是什么(dependincesManagment和dependinces)规范性的意义、不规范的代价 ①版本号不统一修改困难不同版本号jar包api差异大处理起来较为影响开发效率 ②层级不明确容易造成jar包重复、不好管理天然的jar包冲突比如tomcat-embed和sevlet-api
6、网络模式
7、netty框架介绍
8 redis集群与未送达分布式存储与部署
es/网站数据访问量
高并发写入excel如何做规范
实际开发 基本合法性校验、保障 自己处理过那些空指针异常结合之前笔记做下完善 接口入参string、collection等集合方面的处理
mysql问题扩展
mysql两款索引锁为何支持类型不同统计行数与是否支持事务的关系
or语句和and语句建索引的区别是什么 无法对or语句的查询字段直接创建索引需要把or条件拆分为一个个union而后分别对这些被拆分的字段创建符单值索引
select * from student
where stu_name wzh OR stu_class_id 202305171357094319 OR stu_score 1194
ORDER BY create_time DESC;EXPLAIN select * from student where stu_name wzh
union
select * from student where stu_class_id 202305171357094319
union
select * from student where stu_score 100
ORDER BY create_time DESC;union是对这三个独立sql取结果集的合集并去重union All则是不去重union连接中除了第一个语句是主查询后面的语句都是UNION类型的查询最后UNION RESULT是对前面所有的结果集取交集并取重但涉及到order by依然会出现内排序的情况暂时难以化解type代表执行类型ref即根据这一个查询条件因为查询条件字段不是唯一性索引或主键索引所以这一个条件中可能有多个值对应同理如果查询条件字段是唯一性索引或主键索引所以这一个条件中只可能有一个值对应所以typeconstref代表使用查询字段中索引值的类型比如有实际使用索引的查询中ref不为空通常上述查询条件都是一个常量故ref const而连表查询中被驱动表中使用的索引是一个字段这个字段就代表一堆连连接字段值的集合非常量值 union语句上述写法中单个select语句中不能使用order by否则报错Incorrect usage of UNION and ORDER BY如下 需要从语法上做解决但这种情况依然不能解决UNION RESULT中出现文件内排序 试图用union来代替or绝非明智选择union的选择非常非常慢尽管union所连接的单条sql执行速度平均都是0.0.1s,但使用union连接后执行速度变为了0.7sunion ALL连接时间变为了0.35s为何那么慢
mysql基础架构