当前位置: 首页 > news >正文

合肥网站建设佳蓝网络杭州网站开发制作公司

合肥网站建设佳蓝网络,杭州网站开发制作公司,vue做网站看不到htmI吗,广告制作公司简介怎么写我对我的Java基础不自信了1、List和set的区别?2、HashSet 是如何保证不重复的3、HashMap是线程安全的吗,为什么不是线程安全的?4、HashMap的扩容过程5、Java获取反射的三种方法6、Redis持久化机制原理7、redis持久化的方式各有哪些优缺点1、L…

我对我的Java基础不自信了

  • 1、List和set的区别?
  • 2、HashSet 是如何保证不重复的
  • 3、HashMap是线程安全的吗,为什么不是线程安全的?
  • 4、HashMap的扩容过程
  • 5、Java获取反射的三种方法
  • 6、Redis持久化机制原理
  • 7、redis持久化的方式各有哪些优缺点

1、List和set的区别?

相同点:

	List和set都是继承自Collection接口。

不同点:
Set:

  • 元素无序,不可重复;
  • 只能用迭代,不能用for循环;
  • 检索效率低,增删效率高;
  • 插入和删除不会引起元素位置的变化

List:

  • 元素有序,可重复;
  • 可以用for循环遍历;
  • 检索效率高,插入效率低
  • 会引起元素位置的变化

注释:set 元素虽然无放入顺序,但是元素在set中的位置是有该元素的 HashCode 决定的,其位置其实是固定的,加入Set 的Object 必须定义 equals ()方法 。

2、HashSet 是如何保证不重复的

我们可以根据hashSet的源码来解说,以下是 HashSet 部分源码:

private static final Object PRESENT = new Object();
private transient HashMap<E,Object> map;public HashSet() {map = new HashMap<>();
}
public boolean add(E e) {return map.put(e, PRESENT)==null;
}

因为HashMap的 key 是唯一的,由上面的代码可以看出HashSet 添加进去的值就是作为HashMap 的key。所以不会 重复。(不仅要比较hash值,同时还要结合 equles 方法比较。)

3、HashMap是线程安全的吗,为什么不是线程安全的?

首先HashMap 不是线程安全的。

举个例子说明:

  1. 如果有两个线程A和B,都在做插入数据,并且刚好这俩数据经过哈希计算后得到的哈希值一样,且该位置没有别的数据。
  2. 假设有一种情况,线程A通过if语句判定,该位置没有哈希冲突,进入了if语句内,但还没有执行插入数据的时候,CPU把资源让给了线程B (你说气不气人)。
  3. 这个时候线程A停留在了if语句里面,但没有执行插入数据。
  4. 线程B获得CPU资源后,也通过if语句判定该位置没有哈希冲突,也进入了if语句。线程B使用完CPU资源后,轮到了线程A,这时候线程A直接执行插入数据操作,而无需判定。
  5. 这时候你就会发现,线程A把线程B插入的数据给覆盖掉了。

4、HashMap的扩容过程

我们都知道,在向HashMap容器里。添加元素的时候,会先判断容器内的元素个数,如果大于等于这个阈值(知道这个阈字怎么念吗?不念 fa 值,念 yu 值四声)。即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。

扩容就是重新计算容量,当然 Java 里的数组是无法自动扩容的,方法 是使用一个新的数组代替已有的容量小的数组。在扩容的时候也可能会导致数据不一致,因为扩容是从一个数组拷贝到另外一个数组。

5、Java获取反射的三种方法

  1. 通过new对象实现反射机制
  2. 通过路径实现反射机制
  3. 通过类名实现反射机制

例如:

public class Student {private int id;String name;protected boolean sex;public float score;
}
public class Get {
//获取反射机制三种方式
public static void main(String[] args) throws ClassNotFoundException {//方式一(通过建立对象)Student stu = new Student();Class classobj1 = stu.getClass(); System.out.println(classobj1.getName()); //方式二(所在通过路径-相对路径)Class classobj2 = Class.forName("fanshe.Student"); System.out.println(classobj2.getName()); //方式三(通过类名)Class classobj3 = Student.class;System.out.println(classobj3.getName());} 
}

6、Redis持久化机制原理

Redis通过持久化把内存中的数据同步到磁盘上,来保证数据的持久话。当redis重启后,就会把硬盘里的数据读取到缓存中,达到恢复数据的目的。

实现原理:

单独创建一个 fork() 子进程,把当前父进程的数据复制到子进程的内存中,然后由子进程写入到临时文件中。然后临时文件会替换掉快照文件,子进程退出,内存释放。

RDB是redis默认的持久化方式,根据一定的时间周期策略把内存的数据以快照的形式保存到硬盘上,文件名为:dump.rdb。

AOF:Redis会将每一个收到的写命令都通过Write函数追加到文件最后,类似于MySQL的binlog。当Redis重启是会通过重新执行文件中保 存的写命令来在内存中重建整个数据库的内容。

7、redis持久化的方式各有哪些优缺点

首先RDB模式下:
优点:

  • 只有一个文件 dump.rdb,方便持久化;
  • 容灾性好,一个文件可以保存到安全的磁盘。
  • 性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO最大化。
  • 相对于数据集大时,比 AOF 的启动效率更高。

缺点:

  • 数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。

AOF模式下:
优点

  • 数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。
  • 通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。
  • AOF 机制的 rewrite 模式。(AOF 文件没被 rewrite 之前,可以删除其中的某些命令)

缺点:

  • AOF 文件比 RDB 文件大,且恢复速度慢。
  • 数据集大的时候,比 rdb 启动效率低。
http://www.yayakq.cn/news/825651/

相关文章:

  • 行业门户网站 建站wordpress主题的作用
  • 比较好的网站空间前端项目
  • 北京网站快速排名优化上海seo排名
  • 网站建设微盘下载成都网站建设 好多科技
  • 网站开发框架有哪些老外做摄影网站花多少钱
  • 网站地图可以自己做么广告设计公司有什么岗位
  • 网站建设的业务范围免费商业源码论坛
  • 沧州海外网站建设wordpress 导出
  • 临沂专业网站制作公司网站建设的市场需求
  • 039 织梦云idc网站源码什么叫做网络营销
  • c站龙岩融胤网络科技有限公司
  • 徐州有哪些网站制作公司建筑设计网站网址
  • .top和网站计算机网站建设文献综述
  • 哪个网站有激光打标业务做ipad怎么制作网站
  • 怎样申请一个免费的网站空间WordPress透明二次元模板
  • 网站开发服务 税企业网络规划和设计方案
  • 可发外链的高权重网站网站空间和域名区别
  • 南昌中企动力做的网站怎么样仿网站百度会怎么做
  • 做网站的费用是多少东莞什么平台好做
  • 人社部能力建设中心网站温州网站搭建公司
  • 加盟型网站制作域名和WordPress
  • 模板站怎么改成营销型网站网络推广学习
  • 设计师网站卡密登录百度一下官方网
  • 站长工具高清无吗上海seo服务
  • 法制网站建设问卷调查网络营销活动方案
  • 个人网站用凡科建站好吗网络科技有限公司和科技有限公司的区别
  • 个人网站怎么制作教程浙江网站建设广告语
  • 做个视频网站wordpress调用图标icon
  • 站长网站提交重庆高端网站开发
  • 化妆品网站开发免费的网站推广平台