随笔分类 - 八股文
摘要:ElasticSearch基础 基于文档存储数据,使用json格式存储,比如一个人的信息就会写成一份json文档而不是传统数据库分表分行记录;每次搜索的时候会根据关键词全文搜索,可以返回来好几个json文档,会自动给json文档计算分数,排名越靠前相关性越高。 ES不支持ACID事务,但是对于单个J
阅读全文
摘要:lunux占用内存小的核心原因 极简可裁剪的内核设计,核心只保留进程调度,内存管理等基础操作系统,其他的一些功能比如硬件驱动,文件系统都可以做成可动态加载卸载的模块,像windows就是全部加载进去。 极致的内存共享机制,写时复制,当打开多个进程是,会让父子进程共享同一块物理内存,只有当一个进程需要
阅读全文
摘要:单例模式 一个类在整个应用程序中只存在一个实例对象,单例模式就是为这个唯一的实例对象提供访问入口 优点:1.内存开销小,只创建一个实例对象。 2.避免资源冲突,像连接池,线程池避免多个实例同时操作一个资源导致混乱。 3.全局只有一个访问入口,数据逻辑状态统一 缺点:1. 饿汉式 饿汉就是迫不及待想创
阅读全文
摘要:网络模型 OSI七层模型 物理层:规定物理介质之间的传输方式,电信号,光信号,建立,维护,断开物理连接。 数据链路层:在物理层的基础上建立数据链路,对数据进行分帧,差错校验,确保数据的可靠传输。有PPP(Point-to-Point协议),高级数据链路控制协议(HDLC High-level-Dat
阅读全文
摘要:Mybatis优点 Mybatis是半自动的ORM框架,Hibernate是全自动的ORM框架。如果二级缓存出现错误,Hibernate会及时报错,但是Mybatis就需要开发者自己去感知 把数据库操作逻辑和业务逻辑解耦,不用关心数据库的连接等问题,支持动态sql,事务的一级二级缓存 #{}和${}
阅读全文
摘要:a+=b和a=a+b区别 a=a+b不会进行类型的转换,如果不兼容会直接产生报错。a+=b会自动进行类型转换,不会报错,因为会有强转 JDK8新特性 lambda表达式,Stream API流式编程,函数式接口,接口中的默认方法和静态方法,HashMap中的数据结构的变化 Stream流只能被消费一
阅读全文
摘要:基本数据结构 String类型:热点数据,缓存对象,分布式锁,共享Session信息 List类型:消息队列 hash类型:缓存对象购物车,redission中可重入锁实现 set类型: 交集,并集,差集场景,比如点赞,共同关注 Zset类型:排序场景,比如排行榜 BitMap:适用于二值状态统计,
阅读全文
摘要:caffeine+redis+Spring cache缓存 Caffeine:作为本地一级缓存,速度极快(微秒级),适合缓存「高频访问、变更少、非敏感」的数据(如首页热门文章);Redis 作为二级缓存,解决集群间缓存共享问题,同时通过 TTL 和 Cache Aside 保障全集群数据一致性 Sp
阅读全文
摘要:事务(ACID) 原子性:事务中的所有操作要么全部成功要么全部失败回滚到最初状态。通过undolog回滚日志保证 一致性:事务操作之前和操作之后数据保持完整约束,数据库保证一致性状态,比如A有100,B有100,A给B转100块钱,最后的状态就是A为0,B账户200,他们的总金额始终是200不能改变
阅读全文
摘要:三大范式 确保字段不可以再分开,比如地址按照省份,城市拆开不能混在一起,否则如果我查询在武汉的条件就不好筛选 非主键字段要依赖于主键,而不是部分依赖,比如订单信息由订单id,商品id,商品名称,然后订单id和商品id是复合主键,那么商品名称值依赖于这个商品id,正确的应该拆成两张表 非主键不能传递依
阅读全文
摘要:JVM内存模型(每个线程独立拥有,线程结束后销毁) 线程私有区 程序计数器:记录当前线程字节码行号指示器,用于线程切换之后恢复执行位置。唯一不会抛出OutOfMemorryError区域 虚拟机栈:每一个方法对应一个栈帧,方法执行入栈,方法结束出栈,包含局部变量表,操作数,方法出口等。递归出错会造成
阅读全文
摘要:核心特性 IOC容器:控制反转;AOP面向切面编程;事务管理;MVC框架 依赖注入:把对象创建和依赖的关系交给Spring,常见的有构造方法注入,setter注入,还有字段通过这个@Autowired注入 Spring IOC 传统开发过程中,我们需要通过new关键字来创建对象。应用程序不在控制对象
阅读全文
摘要:HashMap 1.HashMap的数据结构,在jdk8之前使用数组+链表,叫做链地址法,jdk8之后使用的是数组+链表+红黑树,数组容易查询难修改,链表慢查询容易修改,所以两者相结合 2.计算完key哈希值之后,要根据key计算出应该对应的数组下标,这个时候就需要对数组的长度进行取模运算,这里采用
阅读全文
摘要:线程池使用 最常用直接通过Executors工具快速床架,不需要手动配置参数,但是不推荐,阿里巴巴开发手册规定了不能使用Executors直接创建,有可能大量创建线程导致OOM 手动创建的ThreadPoolExecutor需要指定7个核心参数 线程池参数 线程核心数(长期维持的最小线程数),最大线
阅读全文
摘要:volatile 一个变量修饰符,只能用来修饰变量,可以保证有序性和可见性,但是不能保证原子性,最常见的问题就是i++,他分为三个操作,在主内存中拿到原始值,进行增加,然后从工作内存写回主内存,多个线程并发执行的时候可能会有回写主内存覆盖问题。想要解决可以使用Atomic类,比如AtomicInte
阅读全文
摘要:sychronized sychronized主要用来给同步方法和同步代码块进行加锁,保证多线程环境下的原子性,可见性和有序性 在同步方法中会有一个ACC_SYCHRONIZED标志,如果有线程过来执行方法,就会先检查有没有这个表示,然后获得这个监视器锁,执行方法,再有线程过来的时候就无法获得这个监
阅读全文
摘要:一.String类 String类是通过private final char[] value存储字符的,具有不可变性,只提供读写方法如charAt,但是像修改操作substring()都会创造一个新的String对象,会增加内存分配垃圾回收开销 private保证了无法通过外部修改String的值,
阅读全文

浙公网安备 33010602011771号