1.400w数据量,数据库a和b分别有id和name字段,怎么把数据库b中不一致的数据更新到数据库a,添加数据库a在数据库b中没有的数据?
    update a set a.name = b.name where a.id = b.id;

2.怎么同步mysql数据库的数据至redis?
    实时同步,用户读数据从缓存中读,写只写数据库,先更新数据库,在给缓存中的数据设置过期时间。

3.shiro是怎么使用的?
    用户验证
        导入shiro的jar
        配置shiro的用户和角色/权限信息
        模拟用户登入
            1.IniSecurityManagerFactory 创建工厂
            2.由工厂来创建SecurityManager
            3.创建SecurityManager的运行环境
            4.通过SecurityUtils的到subject信息
            5.创建规定的令牌
                UsernamePasswordToken token = new UsernamePasswordToken(username,password);
            6.登入验证
                subject.login(token);

    角色/权限的判断
        subject.hasRole("roleName")
        subject.hasRoles(List)
        subject.isPermitted("权限名",...)

    shiro的密码加密
        MD5Hash(不可逆)加盐加密
        Md5Hash(str,salt,saltTimes)

4.接口保护,了解对称和非对称加密算法吗?
    接口保护
        使用Token机制
            在用户成功登录的时候,系统给客户端返回一个Token,后续客户端调用服务端的接口都必须带上Token,服务端则校验客户端Token的合法性,如果不一致则拦截该请求。

    对称加密
        加密和解密使用同一个密钥
        优缺点:
            算法公开,计算量小,加密速度快,加密效率高
            双方使用相同的密钥,安全性得不到保障
        注意:
            密钥的保密工作非常重要
            密钥需要定期更换
        举例:AES,DES
    
    非对称加密
        非对称加密需要两个密钥,一个公开密钥和一个私有密钥
        公开密钥和私有密钥是一对
        如果用公开密钥对数据进行加密,则需要用对应的私有密钥才可以解密
        如果用私有密钥对数据进行加密,则需要用对应的公开密钥才可以解密
        特点:
            算法强度复杂,安全性依赖于算法与密钥。
            加密解密速度慢
        与对称加密算法的对比:
            对称加密只有一种密钥,并且是非公开的,如果要解密就需要告知对方密钥
            非对称加密有两种密钥,其中一个是公开的,可以只告诉对方公开的密钥

5.zookeeper和redis分布式锁区别
    zookeeper分布式锁,获取不到锁的情况下,注册一个监听器即可,不需要不断主动尝试获取锁,节省性能
    redis分布式锁,需要不断主动尝试获取锁,比较消耗性能
    如果是redis获取锁的那个客户端出现bug或者宕机了,那么就只能等待超时时间之后才能释放锁
    zookeeper因为创建的是临时znode,只要客户端挂了,znode就没了,这时就会自动释放锁

6.redis geo怎么使用
    geoadd
        将给定的空间元素(经纬,名字)添加到指定的key中
        有效的经度介于-180至180度之间
        有效的纬度介于-85.05112878至-85.05112878之间
        返回值:
            新添加到key中的空间元素的数量,不包括已经存在但是被更新的元素。
    
    geopos
        从key中返回所有给定位置元素的位置(经纬)
        返回值:
            返回一个数组,数组中每个项都由两个元素组成:第一个元素为经度,第二个元素为纬度

    geodist
        返回两个给定位置之间的距离
        如果两个位置之间的其中一个不存在,那么就返回空值
        指定单位的参数unit必须是(m,km,mi,ft)中的一个
        返回值:
            计算出的距离会以双精度浮点数的形式被返回。如果给定的位置元素不存在,则返回空值。

    georadius
        以给定的经纬度为中心,返回key包含的位置元素当中,与中心距离不超过给定最大距离的所有位置元素

    geohash
        返回一个或多个位置元素的geohash表示
        返回值:
            一个数组,数组中的每个项都是一个geohash。命令返回的geohash的位置与用户给定的位置一一对应。

7.mysql怎么查询用户的登入次数
    设置登录表,设置创建时间字段,根据用户id分组查询登录次数

8.常用的集合类有哪些,他们的父类是哪个?
    List、Set、Map
    List:
        ArrayList
            1) ArrayList 实现了 List 接口,继承了 AbstractList 类,由一个 Object[] 实例实现,即底层为数组结构;
            2) 默认初始化长度为 10,扩容规则为 0.5倍的原容量加1,即一次扩容后的长度为 16;
            3) 特点:查询速度快,添加、删除相对于LinkedList较慢、线程不同步(不安全)。
        LinkedList
            1) LinkedList 实现了 List 接口,继承了 AbstractSequentialList 类,由一个 Node 节点链表实现,即底层为链表结构;
            2) 由于LinkedList 数据结构为链表,无预扩容机制;
            3) 特点:添加、删除速度快,查询相对于ArrayList较慢、线程不同步(不安全)。
    Set:
        HashSet
            1) HashSet 实现了 Set 接口,继承了 AbstractSet 类,由哈希表支持,看源码可以发现是一个 HashMap 实例。
            2) HashSet 不保证集合内元素的迭代顺序,特别是不保证迭代顺序永久不变,该集合运行 null 元素存在。
            3) HashSet 中的元素,作为 HashMap 键值对的 Key 存储,而 Value 由一个统一的值保存。
            4) HashSet 默认初始化大小为 16,扩容加载因子为 0.75,扩容大小为原来的一倍。即一个初始化size为16的
               HashSet,元素添加到12个的时候会进行扩容,扩容后的大小为32。
        LinkedHashSet
            1) LinkedHashSet 实现了 Set 接口,继承了HashSet类,由哈希表支持,看源码可以发现是一个 LinkedHashMap 实例。
            2) LinkedHashSet 中的元素有序的,排序规则遵照元素写入顺序进行排序,元素不能重复。
            3) LinkedHashSet 中的元素,作为 LinkedHashMap 键值对的 Key 存储,而 Value 由一个统一的值保存。
    Map:
        HashMap
            1) HashMap实现了 Map接口,继承了 AbstractMap类,数据结构采用的位桶数组,底层采用链表或红黑树进行存储;
            2) 默认初始化长度为 16,扩容加载因子为 0.75,一旦大于 0.75*16之后,就会调用resize()进行扩容,扩容2倍,即32;
            3) JDK1.7中,数据结构采用:数组+链表结构;
               JDK1.8中,数据结构采用:数组+(链表/红黑树);
            4) 支持克隆,无序,线程不同步,非安全。
        Hashtable
            1) Hashtable实现了 Map 接口,继承了 Dictionary类;
            2) 数据结构:也是一个散列表,数据结构与HashMap相同,key、value都不可以为 null;
            3) 该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法;
            4) 默认初始化长度为 11,扩容加载因子为 0.75,一旦>0.75*11之后,就会进行扩容,扩容到2n+1,即23;
            5) 支持克隆,无序,线程同步,安全。在实现的方法上,用 synchronized 关键字进行了修饰,即在方法上实现了同步锁。
            6) 支持 Enumeration 遍历方式。

9.你有使用过什么模板引擎

10.linux系统两个不同的主机怎么复制文件
    使用scp命令
        1.复制本地文件至远程主机
            scp 源文件完整路径 目标主机用户名@主机名或ip:目的地路径
        2.复制远程主机文件至本地
            

11.es怎么使用?数据怎么同步

12.spring ioc和aop的流程

13.springcloud用过哪些组件?

14.springcloud网关用的什么?怎么使用?

15.平时有看源码的习惯吗?

16.微服务框架会搭建吗?

17.Ajax的异步和同步

18.Oracle创建存储过程

19.Spring IOC,AOP

20.SQL语句优化,

21.linux会部署吗?

22.liux简单的指令有哪些

23.你们公司项目怎么部署在本地的

24.MySql怎么查询最近12天用户的注册数

25.数组去重,几百万条数据怎么办

26.ES全文搜索是怎么实现的

27.SpringCloud和SpringBoot的区别

28.用Mongodb是做什么的

29.说说SpringCloud

30.说说Rabbitmq

31.抽象类和接口的区别

32.介绍一下sql的事物,工作中什么情况下用过事物

33.string倒序

34.java基本数据类型有哪些,int的长度,byte的长度

35.String类和类方法 是否可以被继承,为什么?

36.List,set,Map是否都是继承collection

37.Map继承什么

38.Hibernate在不查询表,和查看表结构的情况下,怎么知道数据库表结构

39.数据库索引的好处,为什么要用索引

40.Hashtable 和HashMap的区别,HashMap可以存null值吗?

41.怎么避免多线程死锁

42.ArrayList和vector的区别

43.java读取xml文件的方式

44.io流继续向文本中添加信息用什么方法

45.jsp的内置对象有

46.数据库管理查询时左查询用什么关键字,左查询以哪边数据为准

47.A用户访问只能看到A用能看的东西,B用户访问只能看到B用能看的东西,用什么方式实现

48.一个项目的整个开发流程,从始到终是什么过程。将这几个流程按照时间由长到短怎么排?

49.finally的作用

50.Math.round(11.5)和Math.round(-11.5)的值分别是多少,为什么?

51.public,private,default,protected的作用域

52.linux 你常用的指令

53.oracle存储过程 游标

54.sql优化

55.负载均衡的作用

56.redis缓存穿透?
    穿透:指频繁查询一个不存在的数据,由于缓存中没有,每次都要到dao层去查询,从而失去了缓存的意义
    解决方案:dao层查询不到就缓存一个null结果,查询缓存时先判断是否exists(key),如果有就返回null,如果没有则查询后返回
    注意:insert时需要清楚查询的key,否则即便数据库中有值也查询不到,也可以设置过期时间

57.redis缓存雪崩?
    雪崩:大量缓存数据失效时,引发大量地去查询数据库
    解决方案:1.用锁/分布式锁或者队列进行串行访问
             2.缓存失效时间分布均匀

58.redis热点key(缓存击穿)?
    击穿:某个key访问非常地频繁,当key失效的时候有大量线程来构建缓存,导致负载增加,系统崩溃。
    解决方案:1.使用锁,单机使用synchronized,lock等,分布式用分布式锁
             2.在value设置一个比过期时间t0小的t1,当t1过期的时候,延长t1并做更新缓存的操作    

 

                                                                                                                                       龙神制作  2021年1月4日