【面试问题第二篇】小厂面试
Java基本数据类型八个byte、short、int、long、float、double、char、boolean。前四个是整数中间两个浮点char是字符boolean是布尔。进程与线程进程是系统分配资源的基本单位线程是CPU调度的基本单位。一个进程里可以有多个线程共享进程的资源比如内存。线程的唤起方式主要是调用start()启动线程然后线程进入就绪状态等CPU调度。如果是阻塞的比如调了sleep、wait需要等时间到或被notify/notifyAll唤醒。Springmvc的mvc代表什么Model模型封装数据和行为比如 Service、DAO、实体类处理业务逻辑。View视图负责展示数据比如 JSP、Thymeleaf、Freemarker或者 REST 接口返回的 JSON。Controller控制器接收用户请求调用 Model 处理然后返回 View。在 Spring MVC 里就是 Controller 类里面的方法处理请求返回 ModelAndView 或直接返回数据。核心流程用户请求 - DispatcherServlet前端控制器 - 根据映射找 Controller - 执行业务 - 返回结果给 View 解析 - 渲染返回给用户。String的长度是可变的吗String是不可变的长度固定。每次修改其实都是新创建对象。要变长用StringBuilder或StringBuffer。String buffer和string builder的区别两者都是可变字符串但StringBuffer是线程安全的方法加了同步锁StringBuilder不是所以单线程下StringBuilder更快。常见的集合主要分两大类CollectionList、Set、Queue和MapHashMap、TreeMap等。常用的有ArrayList、LinkedList、HashSet、HashMap。Arraylist和linkedlist的区别ArrayList底层是数组查询快增删慢LinkedList底层是双向链表增删快查询慢。另外LinkedList还实现了Deque可以当队列用。Set存放有序吗可重复吗Set是无序且不可重复的。但具体实现有例外HashSet无序TreeSet按自然顺序或比较器排序LinkedHashSet按插入顺序。Hashmap的key可以为null吗可以HashMap允许一个null键和多个null值。但Hashtable和ConcurrentHashMap不允许key或value为null。Redis的优势基于内存数据读写都在内存速度极快能达到十万级 QPS。丰富的数据类型String、Hash、List、Set、ZSet、Bitmap、HyperLogLog、Geo、Stream不同场景都能支持。单线程模型6.0 之前完全单线程之后网络 I/O 多线程但执行命令仍是单线程避免了多线程锁竞争原子操作简单性能稳定。持久化支持 RDB快照和 AOF追加日志重启恢复数据。高可用主从复制、哨兵模式、集群分片保证服务可用和扩展性。原子操作所有操作都是原子性的多个命令还支持 Lua 脚本保证原子性。功能丰富支持发布订阅、事务、管道、Lua 脚本等。经常改变的数据适合存redis吗适合如果读多写多且对数据一致性要求不那么严格Redis 的高性能非常适合因为写也是内存操作极快。不太适合如果数据频繁变化且必须可靠持久化Redis 的持久化机制RDB 定时保存AOF 可能丢一两条可能无法满足强持久要求一般用作缓存底层用数据库。注意如果写太频繁导致 AOF 频繁刷盘可能影响性能但 Redis 提供了多种 AOF 刷盘策略always/everysec/no可以权衡。总之Redis 很适合高频读写但最终持久化还是要结合数据库面向对象三大特性封装把对象的属性成员变量和实现细节隐藏起来只暴露公共方法getter/setter来访问。比如 private 修饰字段通过 public 方法操作保护数据不被乱改降低耦合。继承子类继承父类的属性和方法可以扩展或重写。Java 里是单继承一个子类只能有一个直接父类但可以实现多接口。提高代码复用性。多态同一操作作用于不同对象产生不同解释。比如父类引用指向子类对象调用同名方法实际执行子类重写的方法。多态的三个条件继承、重写、父类引用指向子类对象。Mysql的优化可以从几个层面SQL优化索引、避免全表扫描、索引优化正确建索引、覆盖索引、库表结构优化分库分表、字段类型选择、配置优化buffer大小、硬件升级。常用explain分析SQL。Spring的核心思想IoC控制反转和AOP面向切面编程。IoC把对象创建和依赖交给容器管理解耦AOP把通用逻辑抽离动态织入。Springboot的自动化配置原理核心是EnableAutoConfiguration它通过Import导入AutoConfigurationImportSelector这个类会读取META-INF/spring.factories里的自动配置类按条件Conditional判断是否生效从而自动配置Bean。用过哪些注解常见的如Controller/RestController、Service、Repository、Component、Autowired、Qualifier、Value、Configuration、Bean、SpringBootApplication、RequestMapping系列、Transactional等。锁的种类广义上分乐观锁和悲观锁。Java里具体有synchronized隐式锁、ReentrantLock显式可重入锁、ReadWriteLock读写锁、StampedLock更高效的乐观锁等。还有分布式锁如基于Redis的Redisson。不用跟上面回答一样自己理解性记忆。