java面经学习002
2. Java都有哪些map,分别怎么实现的,具体讲
3. 除了LinkedHashMap,你还知道哪些有序map
4. ConcurrentHashMap讲一讲
5. 为什么要有线程池
6. 线程池有哪几类?有什么区别?有哪些参数?拒绝策略有哪些
7. 阻塞队列都有哪几种,有什么区别
8. Java的反射怎么理解
9. Spring的IOC和AOP怎么理解
10. Spring项目启动的时候会加载哪些资源,顺序是怎么样的
11. 浏览器输入一个URL,会发生什么,整个过程说一下
12. Http讲一讲,请求有哪些内容,响应有哪些内容
13. 你笔试分好高,平时刷过很多题吗?怎么刷的?
2. Java都有哪些map,分别怎么实现的,具体讲
Map 接口存储一组键值对对象,提供key(键)到value(值)的映射。key和value之间存在单向一对一关系,即通过指定的key,总能找到唯一的、确定的value。从Map中取出数据时,只要给出指定的key,就可以取出对应的value,Map的key不能重复,如果重复添加,会覆盖原来的值。
常用的有:HashMap、HashTable、TreeMap、ConcurrentHashMap、LinkedHashMap、weakHashMap
HashMap是可以序列化的。是线程不安全的,底层主要是基于数组和链表实现,有相当快的查询速度,HashMap的底层是通过链表来解决hash冲突的。具体就是把相同hash值的HashMap,通过链表的形式进行存储, |
HashTable是可以序列化的。是线程安全的,由synchronized修饰,不允许保存 数据结构与HashMap是相同的 |
TreeMap的实现是红黑树算法的实现 |
ConcurrentHashMap采用了非常精妙的"分段锁"策略,ConcurrentHashMap的主干是个Segment数组。Segment继承了ReentrantLock,所以它就是一种可重入锁(ReentrantLock)。在ConcurrentHashMap,一个Segment就是一个子哈希表,Segment里维护了一个HashEntry数组,并发环境下,对于不同Segment的数据进行操作是不用考虑锁竞争的。 |
LinkedHashMap是继承于HashMap,是基于HashMap和双向链表来实现的。 |
3. 除了LinkedHashMap,你还知道哪些有序map
TreeMap、
4. ConcurrentHashMap讲一讲
https://www.cnblogs.com/ylspace/p/12726672.html
5. 为什么要有线程池
线程使应用能够更加充分合理的协调利用cpu 、内存、网络、i/o等系统资源。
线程的创建需要开辟虚拟机栈,本地方法栈、程序计数器等线程私有的内存空间。
在线程的销毁时需要回收这些系统资源。频繁的创建和销毁线程会浪费大量的系统资源,增加并发编程的风险。
另外,在服务器负载过大的时候,如何让新的线程等待或者友好的拒绝服务?这些丢失线程自身无法解决的。所以需要通过线程池协调多个线程,并实现类似主次线程隔离、定时执行、周期执行等任务。线程池的作用包括:
- 利用线程池管理并复用线程、控制最大并发数等。
- 实现任务线程队列缓存策略和拒绝机制。
- 实现某些与时间相关的功能,如定时执行、周期执行等。
- 隔离线程环境。比如,交易服务和搜索服务在同一台服务器上,分别开启两个线程池,交易线程的资源消耗明显要大;因此,通过配置独立的线程池,将较慢的交易服务与搜索服务隔开,避免个服务线程互相影响。
6. 线程池有哪几类?有什么区别?有哪些参数?拒绝策略有哪些
https://www.cnblogs.com/gaopengpy/p/12148971.html
newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor、newScheduleThreadPool、newSingleThreadScheduledExecutor
7. 阻塞队列都有哪几种,有什么区别
BlockingQueue
https://www.iteye.com/blog/wsmajunfeng-1629354
“生产者”和“消费者”模型中,生产者产出数据的速度和消费者消费的速度,,我们每个程序员都必须去自己控制这些细节,尤其还要兼顾效率和线程安全,而这会给我们的程序带来不小的复杂度。
当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列。
当队列中填满数据的情况下,生产者端的所有线程都会被自动阻塞(挂起),直到队列中有空的位置,线程被自动唤醒。
8. Java的反射怎么理解
https://www.cnblogs.com/jiangym/p/13560921.html
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
9. Spring的IOC和AOP怎么理解
https://www.cnblogs.com/chenssy/p/9576769.html
Inversion of Control 控制反转 它还有一个别名为 DI(Dependency Injection
),即依赖注入。
所谓 IOC ,就是由 Spring IOC 容器来负责对象的生命周期和对象之间的关系
- 谁控制谁:在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IOC 容器后,则直接由 IoC 容器来控制。所以“谁控制谁”,当然是 IoC 容器控制对象。
- 控制什么:控制对象。
- 为何是反转:没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转。
- 哪些方面反转了:所依赖对象的获取被反转了
它降低组件之间的耦合度,实现软件各层之间的解耦,同时在保障不改变源码的情况下实现外部对象动态的注入到组件中,这样就能减少后期维护成本。
aop是主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
10. Spring项目启动的时候会加载哪些资源,顺序是怎么样的
https://www.cnblogs.com/jiangym/p/13567617.html
11. 浏览器输入一个URL,会发生什么,整个过程说一下
12. Http讲一讲,请求有哪些内容,响应有哪些内容
HTTP相关知识学习 https://www.cnblogs.com/jiangym/p/13592327.html
java面经学习002的更多相关文章
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- 一位资深程序员大牛给予Java初学者的学习路线建议
java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...
- java并发编程学习: ThreadLocal使用及原理
多线程应用中,如果希望一个变量隔离在某个线程内,即:该变量只能由某个线程本身可见,其它线程无法访问,那么ThreadLocal可以很方便的帮你做到这一点. 先来看一下示例: package yjmyz ...
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- Java程序员学习之路
1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...
- 老鸟谈谈JAVA EE的学习
老鸟谈谈JAVA EE的学习 因为出差和项目的原因,有将近一个月的时间没有更新博客了,今天终于得闲,和兄弟们分享一下JAVA EE的学习心得.书中带过,直入主题,下面我们首先看看什么是JAVA EE. ...
- Java虚拟机JVM学习07 类的卸载机制
Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...
- Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- Java虚拟机JVM学习05 类加载器的父委托机制
Java虚拟机JVM学习05 类加载器的父委托机制 类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap ...
- Java虚拟机JVM学习04 类的初始化
Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...
随机推荐
- docker容器部署flask单页面应用
本地安装docker,拉取centos镜像. docker pull centos:7 本地文件结构: /usr/local/var/tmp/docker_demo .app ---requireme ...
- springboot ElasticsearchRepository date_histogram 聚合查询
NativeSearchQueryBuilder nsqb = new NativeSearchQueryBuilder(); DateHistogramAggregationBuilder dhb ...
- 初学银河麒麟linux笔记 第六章 发布qt程序
本章参考了@长沙红胖子Qt 的笔记 https://blog.51cto.com/hongpangzi/5788384 这里纪录一下步骤 linux上的QT程序已经能正常编译运行,这里需要进行发布. ...
- CCIE DC Multicast Part 2.
Hi Guys! In my last blog post, we had a quick look at multicast and a more in depth look at how PIM ...
- [2] Bert 论文精读
BERT是NLP领域让预训练这件事情出圈的工作. 开篇Introduction介绍了两类主流的预训练方法: 1.feature-based,即基于特征的,即我首先通过预训练得到一些比较好的特征,然后将 ...
- FastJson JdbcRowSetImpl
Java安全之FastJson JdbcRowSetImpl 链分析 利用限制 RMI利用的JDK版本≤ JDK 6u132.7u122.8u113 LADP利用JDK版本≤ 6u211 .7u201 ...
- docker 安装 elasticsearch7.6.2 kibana7.6.2
[root@abcdefg bin]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6896f6e3202c ...
- npm vue-router安装报错
因为2022年2月7日以后,vue-router的默认版本,为4版本,而且 vue-router4,只能在vue3中,只有vue-router3中,能用在vue 2中 如果把vue-router4强制 ...
- sql-log
使用插件必须 先设置打印sql日志级别 debug 不然打不出来 SQL Params Setter插件 Ctrl+V mybaties log
- Element--->>>最新骨架屏Skeleton使用
首先,Element在最近的一次更新中(时间:2021-06-29) 新增了Skeleton骨架屏组件.Empty空状态组件. 那么在使用其自带组件Skeleton时,应将按照如下步骤使用: Ⅰ:如果 ...