农村建设有限公司网站,珠海公司网站制作公,app定制开发网络公司,建设单位应该关注的网站文章目录项目介绍Java基础MapHashMap v.s Hashtable(5点)ConcurrentHashMap v.s Hashtable(2点)代理模式1. 静态代理2. 动态代理2.1 JDK 动态代理机制2.2 CGLIB 动态代理机制Java并发线程volatilesynchronized线程池JVM类加载机制垃圾回收#xff08;GC#xff09;1. 引用类型…
文章目录项目介绍Java基础MapHashMap v.s Hashtable(5点)ConcurrentHashMap v.s Hashtable(2点)代理模式1. 静态代理2. 动态代理2.1 JDK 动态代理机制2.2 CGLIB 动态代理机制Java并发线程volatilesynchronized线程池JVM类加载机制垃圾回收GC1. 引用类型2. 垃圾收集3. 垃圾回收算法内存回收方法论4. 垃圾收集器内存回收具体实现**Serial****ParNew****Parallel Scavenge****Serial Old****Parallel Old****CMS****G1**Garbage-First设计模式单例模式MySQL存储引擎索引1. 优缺点2. 底层数据结构BB树3. 索引类型总结事务1. ACID2. 并发事务问题3. 并发事务控制方式锁MVCC4. 隔离级别锁机制MVCCRC和RR下 MVCC 的差异Redis为什么用redis做mysql缓存缓存读写策略1. 旁路缓存模式2. 读写穿透3. 异步缓存写入数据结构计算机网络HTTP与HTTPS三次握手建立TCP连接四次挥手断开TCP连接TCP v.s UDP操作系统SpringIoCAoP面试题目拼多多 3.23美团-履约 3.24联想 3.27蚂蚁-数金 3.28美团-酒旅 3.30美团-酒旅 3.30项目介绍
用户信息明文存储在数据库中不安全
shiro
三大概念
Subject负责存储与修改当前用户的信息和状态SecurityManager安全相关的操作实际上是由她管理的Realms负责从数据源中获取数据并加工后传给 SecurityManager
四大功能
Authentication认证Authorization授权Session Management会话管理Cryptography加密
Java基础
Map
HashMap v.s Hashtable(5点) ConcurrentHashMap v.s Hashtable(2点)
底层数据结构不同 实现线程安全方式不同 代理模式
1. 静态代理
2. 动态代理 2.1 JDK 动态代理机制 2.2 CGLIB 动态代理机制
Java并发
线程
volatile
synchronized
synchronized 是 Java 中的一个关键字翻译成中文是同步的意思主要解决的是多个线程之间访问资源的同步性可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。
线程池
线程池就是管理一系列线程的资源池
JVM
类加载机制
类加载器通过类的全限定性类名带包路径如java.lang.String获取该类的二进制字节流 Bootstrap加载java核心库(如$JAVA_HOME/jre/lib/rt.jar) 好处不需要太多的安全检查提升性能 Extension加载拓展库$JAVA_HOME/jre/lib/ext/*.jarAppClass根据java的类路径加载类一般的java应用的类$CLASSPATH用户自定义 加载方式双亲委派机制 过程 收到类加载请求不会自己加载而是逐级向上委托最终到达顶层的Bootstrap如果父类加载器完成则返回否则交给子类尝试。 好处 避免类的重复加载java类由于加载机制形成了优先级的层次关系防止核心类被篡改防止下层的同名类篡改核心API库 打破这个机制 意义由于类加载器受到加载范围的限制某些情况下父类加载器无法加载需要的类不属于其加载范围但根据机制只能其加载所以需要子类加载器加载。方法使用自定义加载器如何 1、找到ClassLoader类的loadClass()方法拷贝2、写自定义加载器类粘贴3、删去loadClass()中的双亲委派机制的部分4、判断类是否为系统类是的话使用双亲委派机制否则自己的方法加载。 应用 TomcatwebappClassLoader加载自己目录下的class文件目的1、隔离每个webapp下的class和lib2、使用单独的加载器以免被恶意破坏3、热部署修改文件不用重启自动重新装载
垃圾回收GC
1. 引用类型 2. 垃圾收集 垃圾不再被使用的对象死亡的对象 哪些垃圾需要回收 引用计数法每个对象添加一个引用计数器当为0时就表示死亡 问题循环引用不可回收造成内存泄露空间占用 可达性分析算法以根对象集合GC Roots为起点分析GC Roots连接的对象是否可达解决了循环引用问题。 GC Roots就是对象 1、虚拟机栈中的栈帧中的局部变量所引用的对象2、java本地方法栈中java本地接口引用的对象3、方法区中静态变量引用的对象全局对象4、方法区中常量引用的对象全局对象 问题多线程下更新了访问过的对象的引用 误报原被引用的对象不再被引用。影响较小顶多减少GC次数。 漏报将已被访问过的对象设置为未被访问过。影响较大可能会使引用对象被GC导致jvm崩溃。 解决方法Stop-the-world等所有线程到达安全点再进行Stop-the-world。 Stop-the-world用户运行至安全点safe point或者安全区域之后就会挂起进入暂停状态。 什么时候回收 Minor GCyoung gc发生在年轻代的gcMajor GColg gc发生在老年代的gc**Full GC**回收整个堆的内存 触发条件 System.gc()通过Minor GC进入老年代的平均大小 老年代的可用内存老年代空间不足
3. 垃圾回收算法内存回收方法论 4. 垃圾收集器内存回收具体实现
各收集器关系 Serial 单线程所有线程stw 新生代标记-复制老年代标记-整理 缺点需要停止所有工作线程效率低 场景对应用的实时性要求不高的client级别桌面应用的默认方式单核服务器 ParNew Serial的多线程版本stw 复制算法 新生代标记-复制老年代标记-整理 实际线程默认和cpu数量相同 优点有效利用cpu 缺点和Serial一样 场景Sever模式下的新生代和CMS配合 Parallel Scavenge 新生代收集器、复制算法多线程 与ParNew不同点追求和精确控制高吞吐量而ParNew尽可能缩短用户线程的停顿时间 高吞吐线程运行时间/线程运行时间 垃圾回收时间例子PS就是100秒回收一次垃圾持续10秒吞吐量为90%PN就是50秒回收一次垃圾持续7秒吞吐量为86%。 场景注重高效利用CPU Serial Old Serial的老年代版本标记整理算法 场景client、单核。与PS收集器搭配 Parallel Old Parallel Scavenge的老年代版本多线程标记整理算法 JDK78默认老年代收集器 CMS Concurrent Mark Sweep 多线程、标记清除算法 特点获取最短回收停顿时间 流程 1、初始标记GC Roots直接关联的对象需要Stw2、并发标记与用户线程并发不需要Stw执行Gc Roots Tracing3、重新标记修正并发标记期间发生变动的一些标记需要Stw4、并发清除标记清除 优点并发收集低停顿缺点 对CPU资源敏感标记清除产生空间碎片并发清除过程中会产生新的垃圾只能等下一次 G1Garbage-First 标记整理 复制 特点 并行与并发分代收集自己采用不同的收集方式去处理不同代的垃圾不需要和其他收集器合作空间整合无空间碎片可预测的停顿可预测时间的停顿模型 原理 将java堆分为大小相同的独立区域Region新生代和老年代区域混合 并发标记知道哪些块基本是垃圾就会从这些块下手所以叫G1停顿预测模型 根据之前垃圾回收的数据统计估计出用户指定停顿时间内的回收块个数 “尽力”满足指定的目标停顿时间基于目标选择回收的区块数量 步骤 1、Minor GC 复制算法、并行、stw动态调整年轻区大小根据历史数据和用户指定的停顿时间目标2、老年代收集初始标记stw伴随young gc对Gc Roots直接关联对象进行标记扫描根引用区即survivor区的对象直接到老年代对象的引用。因为进行了YGC新生代中只有survivor区存在对象并发标记寻找整个堆的存活对象并发执行可以被YGC中断 如果整个region都是垃圾直接被回收标记的同时计算region活性比例 重新标记stw完成最后的标记使用了STAB算法 由于用户线程同时进行需要修正之前的标记采用了比CMS更快的初始快照法SATB算法 清理stw复制算法。计算各个region的存活对象和垃圾比例排序识别可以混合回收的区域 。并发清理识别并清理全是垃圾的老年代region3、混合式收集除了整个年轻代收集 还有上个阶段标记出的老年代的垃圾最多的区块持续回收所有被标记的分区恢复到年轻代收集进行新的周期必要时的Full Gc G1的初衷就是避免Full GC
设计模式
单例模式 懒汉式 - 线程不安全 public class Singleton{private static Singleton instance;private Singleton(){}public static Singleton getInstance(){if(instance null){instance new Singleton();}return instance;}
}懒汉式 - 线程不安全 public class Singleton{private static Singleton instance;private Singleton(){}public static synchronized Singleton getInstance(){if(instance null){instance new Singleton();}return instance;}
}双重检验锁 public class Singleton{private static Singleton instance;private Singleton(){}public static Singleton getInstance(){if(instance null){ // single checksynchornized(Singleton.class){if(instance null){ //double checkinstance new Singleton();}}}return instance;}
}饿汉式 - static final field public class Singleton{//类加载时就初始化private static final Singleton instance new Singleton();private Singleton(){}public static Singleton getInstance(){return instance;}
}静态内部类 - static nested class public class Singleton{private static class SingletonHolder(){private static final Singleton instance new Singleton();}private Singleton(){}public static final Singleton getInstance(){return SingletonHolder.instance;}
}枚举 - Enum public class Singleton{private Singleton(){}/***枚举类型是线程安全的并且只会装载一次*/public enum SingletonEnum{INSTANCE;private final Singleton instance;SingletonEnum(){instance new Singleton();}private Singleton getInstance(){return instance;}}public static Singleton getInstance(){return SingletonEnum.INSTANCE.getInstance();}
}
MySQL
存储引擎 MySQL 支持哪些存储引擎 MySQL 5.5.5 前默认MyISAM后默认InnoDB只有 InnoDB 是事务性存储引擎也就是说只有 InnoDB 支持事务。 存储引擎架构 插件式架构支持多种存储引擎不同数据库表可以设置不同搜索引擎存储引擎是基于表的而不是数据库 MyISAM 和 InnoDB 区别7点 MyISAM 性能还行特性不错但不支持事务和行级锁最大的缺陷就是崩溃后无法安全恢复。
索引
常见的索引结构有: B 树 B树 和 Hash、红黑树。在 MySQL 中无论是 Innodb 还是 MyIsam都使用了 B树作为索引结构。
1. 优缺点
优点
使用索引可以大大加快 数据的检索速度大大减少检索的数据量, 这也是创建索引的最主要的原因。通过创建唯一性索引可以保证数据库表中每一行数据的唯一性。
缺点
创建索引和维护索引需要耗费许多时间。当对表中的数据进行增删改的时候如果数据有索引那么索引也需要动态的修改会降低 SQL 执行效率。索引需要使用物理文件存储也会耗费一定空间。
2. 底层数据结构
BB树 为啥不用哈希表做MySQL索引数据结构 Hash 索引不支持顺序和范围查询并且每次 IO 只能取一个。试想SELECT * FROM tb1 WHERE id 500;树直接遍历比 500 小的叶子节点就够了哈希还要把1-499数据hash计算一遍来定位 B树和B树区别3点
3. 索引类型总结 事务
1. ACID
原子性Atomicity 事务是最小的执行单位不允许分割。事务的原子性确保动作要么全部完成要么完全不起作用
一致性Consistency 执行事务前后数据保持一致例如转账业务中无论事务是否成功转账者和收款人的总额应该是不变的
隔离性Isolation 并发访问数据库时一个用户的事务不被其他事务所干扰各并发事务之间数据库是独立的
持久性Durability 一个事务被提交之后。它对数据库中数据的改变是持久的即使数据库发生故障也不应该对其有任何影响。
只有保证了事务的持久性、原子性、隔离性之后一致性才能得到保障。也就是说 A、I、D 是手段C 是目的 2. 并发事务问题 脏读Dirty read 某个事务已更新一份数据另一个事务在此时读取了同一份数据由于某些原因前一个RollBack了操作则后一个事务所读取的数据就会是不正确的 丢失修改Lost to modify 在一个事务读取一个数据时另外一个事务也访问了该数据那么在第一个事务中修改了这个数据后第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失因此称为丢失修改。 不可重复读Unrepeatable read 在一个事务的两次查询之中数据不一致这可能是两次查询过程中间插入了一个事务更新的原有的数据。 幻读Phantom read 在一个事务的两次查询中数据笔数不一致例如有一个事务查询了几列(Row)数据而另一个事务却在此时插入了新的几列数据先前的事务在接下来的查询中就会发现有几列数据是它先前所没有的。
3. 并发事务控制方式
锁
悲观控制模式
共享锁S 锁 又称读锁事务在读取记录的时候获取共享锁允许多个事务同时获取锁兼容。排他锁X 锁 又称写锁/独占锁事务在修改记录的时候获取排他锁不允许多个事务同时获取。如果一个记录已经被加了排他锁那其他事务不能再对这条记录加任何类型的锁锁不兼容。
MVCC
乐观控制模式
多版本并发控制MVCCMultiversion concurrency control 在 MySQL 中实现所依赖的手段主要是: 隐藏字段、read view、undo log。
undo log : undo log 用于记录某行数据的多个版本的数据。read view 和 隐藏字段 : 用来判断当前版本数据的可见性。
4. 隔离级别 读取未提交(READ-UNCOMMITTED) 最低的隔离级别允许读取尚未提交的数据变更可能会导致脏读、幻读或不可重复读。 读取已提交(READ-COMMITTED) 允许读取并发事务已经提交的数据可以阻止脏读但是幻读或不可重复读仍有可能发生。 可重复读(REPEATABLE-READ) 对同一字段的多次读取结果都是一致的除非数据是被本身事务自己所修改可以阻止脏读和不可重复读但幻读仍有可能发生。 可串行化(SERIALIZABLE) 最高的隔离级别完全服从 ACID 的隔离级别。所有的事务依次逐个执行这样事务之间就完全不可能产生干扰也就是说该级别可以防止脏读、不可重复读以及幻读。 锁机制
MVCC
RC和RR下 MVCC 的差异
在事务隔离级别 RC 和 RR InnoDB 存储引擎的默认事务隔离级别下InnoDB 存储引擎使用 MVCC非锁定一致性读但它们生成 Read View 的时机却不同 在 RC 隔离级别下的 每次select 查询前都生成一个Read View (m_ids 列表) 在 RR 隔离级别下只在事务开始后 第一次select 数据前生成一个Read Viewm_ids 列表
Redis
为什么用redis做mysql缓存
1、高性能
MySQL从硬盘读取慢。将用户缓存数据存在redis中下次直接从缓存获取相当于直接操作内存。为啥这么快 基于内存访问速度是磁盘的上千倍基于reactor模式设计开发了一套高效事件处理模型主要是单线程事件循环和io多路复用内置多种优化后的数据结构实现
2、 高并发
单台设备的Redis的QPSQuery Per Second每秒钟处理完请求的次数 是 MySQL 的10倍直接访问 Redis 能够承受的请求远远大于直接访问 MySQL
缓存读写策略
1. 旁路缓存模式
适用读请求比较多的场景服务端同时维系 db 和 cache以 db 的结果为准缓存读写步骤 写 先更新 db然后直接删除 cache 读 从 cache 中读取数据读取到就直接返回cache 中读取不到的话就从 db 中读取数据返回再把数据放到 cache 中
2. 读写穿透
适用读请求比较多的场景
3. 异步缓存写入
适用读请求比较多的场景
数据结构
5 种基础数据结构 String字符串、List列表、Set集合、Hash散列、Zset有序集合。
3 种特殊数据结构 HyperLogLogs基数统计、Bitmap 位存储、Geospatial (地理位置)。
计算机网络
HTTP与HTTPS
区别 传输安全HTTP 是明文传输存在安全风险的问题HTTPS加密传输连接方式HTTP是TCPHTTPS是TCP基础上进行SSL/TLS端口号不同HTTP 是 80HTTPS是 443数字证书HTTPS需要向CA申请数字证书 HTTPS解决了HTTP哪些问题 信息加密交互信息无法被窃取但你的号会因为「自身忘记」账号而没。校验机制无法篡改通信内容篡改了就不能正常显示但百度「竞价排名」依然可以搜索垃圾广告。身份证书证明淘宝是真的淘宝网但你的钱还是会因为「剁手」而没。
三次握手建立TCP连接 一次握手:客户端发送带有 SYNSEQx 标志的数据包 - 服务端然后客户端进入 SYN_SEND 状态等待服务器的确认
二次握手:服务端发送带有 SYNACK(SEQy,ACKx1) 标志的数据包 – 客户端,然后服务端进入 SYN_RECV 状态
三次握手:客户端发送带有 ACK(ACKy1) 标志的数据包 – 服务端然后客户端和服务器端都进入ESTABLISHED 状态完成TCP三次握手。
四次挥手断开TCP连接 第一次挥手 客户端发送一个 FINSEQX 标志的数据包-服务端用来关闭客户端到服务器的数据传送。然后客户端进入 FIN-WAIT-1 状态。
第二次挥手 服务器收到这个 FINSEQX 标志的数据包它发送一个 ACK SEQX1标志的数据包-客户端 。然后此时服务端进入CLOSE-WAIT状态客户端进入FIN-WAIT-2状态。
第三次挥手 服务端关闭与客户端的连接并发送一个 FIN (SEQy)标志的数据包-客户端请求关闭连接然后服务端进入LAST-ACK状态。
第四次挥手 客户端发送 ACK (SEQy1)标志的数据包-服务端并且进入TIME-WAIT状态服务端在收到 ACK (SEQy1)标志的数据包后进入 CLOSE 状态。此时如果客户端等待 2MSL 后依然没有收到回复就证明服务端已正常关闭随后客户端也可以关闭连接了。
TCP v.s UDP
七点不同 UDP 一般用于即时通信比如 语音、 视频 、直播等等。 TCP 用于对传输准确性要求特别高的场景比如文件传输、发送和接收邮件、远程登录等等。
操作系统
Spring
IoC
IoCInversion of Control:控制反转 是一种设计思想而不是一个具体的技术实现。
为什么叫控制反转
控制 指的是对象创建实例化、管理的权力反转 控制权交给外部环境Spring 框架、IoC 容器 AoP
AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关却为业务模块所共同调用的逻辑或责任例如事务处理、日志管理、权限控制等封装起来便于减少系统的重复代码降低模块间的耦合度并有利于未来的可拓展性和可维护性。
面试题目
拼多多 3.23
项目不动产估值系统
学到了什么提到scrapy理论问原理 多源异构数据集数据类型是什么机器学习算法怎么实现的用了哪些特征评估指标是啥准确率r2的含义是什么 R2_score直观且不受量纲影响。其数值大小反映了回归贡献的相对程度即在因变量Y的总变异中回归关系所能解释的百分比其值越高说明模型的解释性越好。 还用过其他评估指标吗还知道其他评估指标吗 平均绝对误差、均方误差、均方根差、均方根百分误差、决定系数R2前四种问题量纲不同时难以衡量模型效果好坏并且可读性较差 训练集和测试集怎么划分的为什么这么划分这么划分结果最好为什么其他划分方式结果不好有分析吗训练集测试集划分比例有什么影响过拟合是什么意思个人能力比较突出的是什么华融实习都是自己做的吗遇到过什么问题怎么解决印象比较深花时间比较多的提到了版本不一致报错java遇到版本不一样问题怎么办a库和b库都用到了c库
java 类加载机制 垃圾回收机制
数据库 redis和mysql有什么不同为啥用redis做缓存 redis数据结构
算法
上海[180.65.28.0, 186.75.28.0]
重庆[101.0.0.0,101,255,255,255]
…一共十万行
然后给ip地址字符串返回城市名称没有对应城市返回
反问什么部门做什么跨境电商 海外业务 推荐搜索
美团-履约 3.24
项目 爬虫策略 数据量 用过大数据挖掘吗spark这些
MySQL 介绍索引 B树和B树区别 还有别的索引吗都用的B树吗 聚簇索引 非聚簇索引 主键索引 非主键索引
java 垃圾回收算法 java的锁synchronizelock 介绍线程池 强引用 弱引用
算法2. 两数相加 - 力扣
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode dummyHeadnew ListNode(-1);ListNode pdummyHead;int add0;while(l1!null||l2!null||add0){int al1null?0:l1.val;int bl2null?0:l2.val;int ansabadd;p.nextnew ListNode(ans%10);addans/10;pp.next;if(l1!null)l1l1.next;if(l2!null)l2l2.next;}return dummyHead.next;}
}联想 3.27
图书项目
spring boot和spring的区别 最大的区别在于Spring Boot的自动装配原理比如 创建Web程序时Spring-导入几个Maven依赖Spring Boot-只需要一个Maven依赖开启功能Spring-XML文件配置Spring Boot-不用XML配置只需要写一个配置类 Spring Boot是一个微服务框架延续了Spring框架的核心思想IOC和AOP简化了应用的开发和部署是Spring的完善和扩展 mysql中有几种表分别存的数据项是什么 userbookcategory图书类别admin_role用户角色admin_permission用户权限admin_role_menu用户角色菜单admin_role_permission用户角色权限book表idcovertitleauthordatepressabscid类别做外键 项目中redis用什么客户端部署 Java 访问 Redis 主要是通过 Jedis 和 Lettuce 两种由不同团队开发的客户端提供访问、操作所需的 APIJedis 比较原生Lettuce 提供的能力更加全面。本项目用Spring Data RedisSpring Data Redis是在 Lettuce 的基础上做了一些封装与 Spring 生态更加贴合使用起来也更简便。 redis用的哪种数据结构存储图书 RedisTemplate是 Spring Data Redis 提供的一个完成 Redis 操作、异常转换和序列化的类String类型keySet keysList Book 存图书列表 List存取的api了解吗 appendget redis缓存是所有图书都存进去吗数据库组建怎么实现的mysql中事务是怎么添加的 步骤1开启事务 set autocommit0; start transaction;可选的步骤2编写事务中的sql语句(select、insert、update、delete) 语句1; 语句2; …步骤3结束事务 commit;提交事务 rollback;回滚事务 一个mapper两个update怎么保证事务不冲突答锁纠正我锁是保证数据一致性的 MVCC undo log隐藏字段ReadView
抵押品项目
怎么构建的数据集
java static和final什么时候用为什么要用 static 加载类加载时初始化加载完成可修饰内部类、方法、成员变量、代码块不可修饰外部类、局部变量作用方便调用没有创建对象的方法/变量 final 加载final可以在编译类加载时初始化也可以在运行时初始化初始化后不能被改变可修饰成员变量、方法、类以及本地变量一旦你将引用声明作 final你将不能改变这个引用了保证数据安全性 static final 可修饰成员变量、方法、内部类被static final修饰意义如下 成员变量属于类的变量且只能赋值一次。方法属于类的方法且不可以被重写。内部类属于外部类且不能被继承。 Object常用hashCode()和equals()什么时候需要重写 1当我们需要重新定义两个对象是否相等的条件时需要进行重写。比如通常情况下我们认为两个不同对象的某些属性值相同时就认为这两个对象是相同的。 例如我们在HashMap中添加元素时我们认为当key相同时两个元素就相同但是默认的Object中的equals(),只是单纯的比较两个元素 的内存地址是否相同不能满足我们的要求所以需要重写。 2当我们自定义一个类时想要把它的实例保存在集合时就需要重写equals()和hashCode()方法 ArrayList的底层数据结构 Object[]数组 HashMap的底层数据结构 jdk1.8之前数组链表链表散列jdk1.8之后链表长度阈值(默认8)将其转化为红黑树减少搜索时间 HashMap数组中怎么存的 存的hash值链表中存键值对 哈希冲突是什么 synchronize怎么用啥时候用 修饰实例方法进入同步代码前要获得 当前对象实例的锁 。修饰静态方法进入同步代码前要获得 当前 class 的锁。修饰代码块 synchronized(object) 表示进入同步代码库前要获得 给定对象的锁。synchronized(类.class) 表示进入同步代码前要获得 给定 Class 的锁
算法口述
两个数组找交集令时间复杂度最小答用set 时间复杂度是多少 排序 双指针初始时两个指针分别指向两个数组的头部。每次比较两个指针指向的两个数组中的数字如果两个数字不相等则将指向较小数字的指针右移一位如果两个数字相等且该数字不等于 pre 将该数字添加到答案并更新 pre 变量同时将两个指针都右移一位。当至少有一个指针超出数组范围时遍历结束。
蚂蚁-数金 3.28
押品项目
从哪些维度对数据进行挖掘得到什么样的结果哪些对算法模型有决定性作用系统开发后端是不是增删改查这些用的什么数据库
java 保证线程安全的办法答锁问我还有其他吗没答出来 互斥同步synchronized是最常用的非阻塞同步无同步方案 说说对锁的了解答乐观锁和悲观锁 悲观锁用什么实现答synchronized和ReentrantLock synchronized和其他独占锁底层是怎么实现的 java为什么会存在线程安全的问题底层原因是什么答并发跟我说是表象问更深层是什么原因 java本身jvm或者内存什么样的设计特点决定它存在这样的问题答线程共享堆和方法区资源同时修改会发生安全问题他还问更深层的是什么 了解java内存模型吗新增一个线程线程里的变量存在于什么地方答栈 这个栈空间是共享的还是独享的答共享的纠正我有一部分共享一部分独享共享function独享变量 变量独享做复制拷贝到工作内存更改完需要回刷产生XXx操作是问题的根本原因 ConcurrentHashMap的源码了解答了一下初始化源码
mysql
索引结构答b树b树特点b树每一层都是链表我说只有叶子是纠正我mysql不是标准b树是变种查询语句建索引abc三个字段有一条语句“a,c”“”是占位符这个语句能不能用到abc复合索引答能问原因不会
redis
读数写数单线程那为什么性能那么好三点
Spring boot 动态加载和动态配置化为开发带来了哪些便利 你在开发中用到了什么动态加载和动态配置化 答spring用xmlsb用配置类纠正Spring也可以用注解不用xml配置动态加载和用不用配置没啥关系
算法
线程安全的单例模式快排有序数组找第一个大于x的元素下标
其他
工作和学习中做的最有挑战或者最有成就感的一件事是什么
美团-酒旅 3.30
hronized是最常用的
非阻塞同步无同步方案 说说对锁的了解答乐观锁和悲观锁 悲观锁用什么实现答synchronized和ReentrantLock synchronized和其他独占锁底层是怎么实现的 java为什么会存在线程安全的问题底层原因是什么答并发跟我说是表象问更深层是什么原因 java本身jvm或者内存什么样的设计特点决定它存在这样的问题答线程共享堆和方法区资源同时修改会发生安全问题他还问更深层的是什么 了解java内存模型吗新增一个线程线程里的变量存在于什么地方答栈 这个栈空间是共享的还是独享的答共享的纠正我有一部分共享一部分独享共享function独享变量 变量独享做复制拷贝到工作内存更改完需要回刷产生XXx操作是问题的根本原因 ConcurrentHashMap的源码了解答了一下初始化源码
mysql
索引结构答b树b树特点b树每一层都是链表我说只有叶子是纠正我mysql不是标准b树是变种查询语句建索引abc三个字段有一条语句“a,c”“”是占位符这个语句能不能用到abc复合索引答能问原因不会
redis
读数写数单线程那为什么性能那么好三点
Spring boot 动态加载和动态配置化为开发带来了哪些便利 你在开发中用到了什么动态加载和动态配置化 答spring用xmlsb用配置类纠正Spring也可以用注解不用xml配置动态加载和用不用配置没啥关系
算法
线程安全的单例模式快排有序数组找第一个大于x的元素下标
其他
工作和学习中做的最有挑战或者最有成就感的一件事是什么
美团-酒旅 3.30