1. hashMap原理, 是否线程安全?<div>2. concurrentHashmap 做了什么优化?</div><div>3. String 是Java基本类型吗?有哪些基本类型?</div><div>4. Collection 和 Collections的区别。</div><div>5. java8 引入了哪些新特性</div><div>6. JVM分为哪些区,每一个区干吗的?</div> 1)方法区(method):被所有的线程共享。方法区包含所有 的类信息和静态变量。<br> 2)堆(heap):被所有的线程共享,存放对象实例以及数 组,Java堆是GC的主要区域。<br> 3)栈(stack):每个线程包含一个栈区,栈中保存一些局部 变量等。<br> 4)程序计数器:是当前线程执行的字节码的行指示器。<div><br></div><div>7. synchronized 和 lock 的区别?</div><div>synchronized原始采用的是CPU悲观锁机制,即线程获得的是独占锁。独占锁意味着其他线程只能依靠阻塞来等待线程释放锁。而在CPU转换线程阻塞时会引起线程上下文切换,当有很多线程竞争锁的时候,会引起CPU频繁的上下文切换导致效率很低。<br> <br>而Lock用的是乐观锁方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是CAS操作(Compare and Swap)。我们可以进一步研究ReentrantLock的源代码,会发现其中比较重要的获得锁的一个方法是compareAndSetState。这里其实就是调用的CPU提供的特殊指令。</div><div><br></div><div>8.mysql 高并发环境解决方案?<br>1. MySQL 高并发环境解决方案: 分库 分表 分布式 增加二级缓存。。。。。<br><br>2. 需求分析:互联网单位 每天大量数据读取,写入,并发性高。<br><br>3. 现有解决方式:水平分库分表,由单点分布到多点数据库中,从而降低单点数据库压力。<br><br>4. 集群方案:解决DB宕机带来的单点DB不能访问问题。<br><br>5. 读写分离策略:极大限度提高了应用中Read数据的速度和并发量。无法解决高写入压力。</div><div><br></div><div>9. 什么是索引?<br>何为索引:<br><br>数据库索引,是数据库管理系统中一个排序的数据结构,索引的实现通常使用B树及其变种B+树。<br><br>在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。<br><br>2.索引的作用?它的优点缺点是什么?<br>索引作用:<br><br>协助快速查询、更新数据库表中数据。<br><br>为表设置索引要付出代价的:<br><br>一是增加了数据库的存储空间<br><br>二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。<br><br>3.索引的优缺点?<br>创建索引可以大大提高系统的性能(优点):<br><br>1.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。<br><br>2.可以大大加快数据的检索速度,这也是创建索引的最主要的原因。<br><br>3.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。<br><br>4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。<br><br>5.通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。<br><br>增加索引也有许多不利的方面(缺点):<br><br>1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。<br><br>2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。<br><br>3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。<br><br></div><div>10. redis 支持哪些数据类型</div><div>Redis支持的数据类型?<br><br>String字符串:<br><br>格式: set key value<br><br>string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。<br><br>string类型是Redis最基本的数据类型,一个键最大能存储512MB。<br><br> <br><br>Hash(哈希)<br><br>格式: hmset name key1 value1 key2 value2<br><br>Redis hash 是一个键值(key=>value)对集合。<br><br>Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。<br><br> <br><br>List(列表)<br><br>Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)<br><br>格式: lpush name value<br><br>在 key 对应 list 的头部添加字符串元素<br><br>格式: rpush name value<br><br>在 key 对应 list 的尾部添加字符串元素<br><br>格式: lrem name index<br><br>key 对应 list 中删除 count 个和 value 相同的元素<br><br>格式: llen name <br><br>返回 key 对应 list 的长度<br><br> <br><br>Set(集合)<br><br>格式: sadd name value<br><br>Redis的Set是string类型的无序集合。<br><br>集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。<br><br> <br><br>zset(sorted set:有序集合)<br><br>格式: zadd name score value<br><br>Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。<br><br>不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。<br><br>zset的成员是唯一的,但分数(score)却可以重复。<br><br>什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?<br><br>持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。<br><br>Redis 提供了两种持久化方式:RDB(默认) 和AOF <br><br>RDB:<br><br>rdb是Redis DataBase缩写<br><br>功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数<br><br><br><br>AOF:<br><br>Aof是-only file缩写<br><br><br><br>每当执行服务器(定时)任务或者函数时flushOnlyFile 函数都会被调用, 这个函数执行以下两个工作<br><br>aof写入保存:<br><br>WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件<br><br>SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。<br></div><div><br></div><div>11. Redis实现分布式锁</div>Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系Redis中可以使用SETNX命令实现分布式锁。<br>将 key 的值设为 value ,当且仅当 key 不存在。 若给定的 key 已经存在,则 SETNX 不做任何动作<div><br></div><div>12. 说说kafka?</div><div>13. 为什么要使用消息队列?</div><div>缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。<br><br>解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。<br></div><div>--前端</div><div>14. 如何实现 js 继承?</div><div>15. 说说vertical-align</div><div>16. flex 布局</div><div>17. 使用过哪些绘图插件 d3, canvas</div><div>18. vue 双向绑定如何实现的</div><div>19. 你的前端工作是如何做的</div><div>20. 前端如何打包部署</div><div>21. 版本控制工具用过哪些?git如何提交代码,如何管理分支,如何解决冲突,版本控制如何做的</div>