Java基础知识点

1.对集合的理解

集合就是一种容器,用于保存一组元素。比较适合保存  引用类型的元素(对象)

集合在使用时,长度不用指定,而且可以实现自动扩容或截断。

集合没有指定泛型之前,默认保存的是任意类型的元素(Object类型),指定泛型之后,可以保存对应类型的元素。

集合中最常见的三种集合类型List、Set、Map。

  • List体系: 有序,可重复

ArrayList: 底层是数组实现,线程不安全,效率高 查询比较高,增删效率低

LinkedList: 底层双向链表,查询慢,增删快 Vector: 底层是数组实现,线程安全,效率低  

  • Set体系: 无序,不可重复

LinkedHashSet与HashSet虽然都是无序的,但是LinkedHashSet是链表式的(有前后加载项),所以LinkedHashSet和元素添加的顺序有关。 

TreeSet添加元素必须为同一类型,否则遍历出错 遍历输出顺序按默认(从小到大的)顺序排列 如:String、int 自然排序要用Comparable重写compareTo方法,实现内部排序。

  • map体系

LinkedHashMap与LinkedHashSet原理相同,方法皆为map方法。

TreeMap与TreeSet原理相同,多了key-value的方式。

Hashtable基于线程安全,效率低,古老。

HashMap基于非线程安全,效率高。

2.前后端怎么数据对接?

3.redis的了解

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。

redis-server会以非daemon的方式来运行,且默认服务端口为6379。

支持五种数据类型:字符串、字符串列表、字符串集合、有序字符串集合、哈希

redis提供了两种持久化的方式,分别是RDB和AOF,可以通过修改redis.conf来进行配置.。

RDB,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;

eg:save 900 1  //至少在900秒的时间段内至少有一次改变存储同步一次

AOF,就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。默认关闭

eg:appendonly yes //yes 开启,no 关闭 

appendfsync always //每次有新命令时执行一次fsync,就将缓冲区的数据放入aof文件

everysec appendfsync everysec //每秒 fsync 一次

appendfsync no  //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)

如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

Redis启动时,先解析日志文件(一堆命令),恢复数据。然后还要加载rdb文件(取并集)。

Redis事务管理

1.MULTI用来组装一个事务;
2.EXEC用来执行一个事务;
3.DISCARD用来取消一个事务;
4.WATCH用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行。nuil有改动

1.通用(general)2.快照(snapshotting)3.复制(replication)4.安全(security)

5.限制(limits) 6.追加模式(append only mode) 7.LUA脚本(lua scripting)
8.慢日志(slow log) 9.事件通知(event notification)

Redis缓存

redis提供了三种缓存机制,LFU,LRU,TTL

.LFU,least frequently used,即最小使用频率淘汰,每个对象使用共计24bit空间用来实施这个算法,24bit分成2个部分,前16bit用来记录上次减少时间(减少的是后面8bit计数器),后面8个bit是一个对数计数器,用来记录这个对象的访问次数。

LRU,last recently used,即最近最少使用淘汰,一般做法是,将hash表的value做成一个指针,指向一个双链表节点,节点中保存实际的value,双链表按照上次访问时间降序排列,当访问到一个对象之后,更新访问时间,并将这个节点移动到表头,若节点不存在就直接插入到表头。当内存门限达到的时候,从链表尾开始删除若干entry。redis为了减少内存使用,不使用双链表或其他结构管理对象,采用随机算法,每次从hash表中随机选择一些key,一般是5个,将这些key存入一个全局的池,池大小一般是16,池中entry按照上次访问时间降序排列,每次从池中选择尾部的entry,就是最差的对象,将这个对象淘汰。

TTL,即生存时间,按照生存时间设置一个对象的生命周期,一个对象生命周期结束之后将其销毁。

Redis提供了两种方式来做消息队列,一种是生产消费模式,另一种是发布订阅模式。

Redis实现消息队列_ALIVE-CSDN博客

4.spring boot启动过程

5.加载静态方法和非静态方法的区别

6.sql优化,优化过程

7.Hashset

Hashmap实现原理?线程安全?扩容阈值?怎么扩容?扩容优化?抖动函数

8.多线程

线程池(参数的意义、原理、任务队列满了会发生什么、拒绝策略、阻塞队列)

9.并行和并发的区别

并发是指一个处理器同时处理多个任务。
并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。

10.java中的多态

11.重写和重载的区别

12.网络安全问题(xss和sql注入)

13.安全验证的方式

14.ThreadLocal

15.垃圾回收算法、识别对象是否存活的方法、循环引用的方法

16.springmvc原理,请求到响应的过程

17.类加载机制

18.索引种类(B+树)

19.打开网站很长时间才得到反馈的原因(客户端分析、并发之类、硬件方面、网络方面、缓存方面)

20.Java异常(运行时异常包括哪些)

21.TCP、IP报文都包含什么?什么关系?

22.TCP握手,为什么有四次

23.mysql并发控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shaooohua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值