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.在静态变量的声明处进行初始 ...
随机推荐
- Pytest 插件
1. 执行标记用例执行次数 首先安装 repeat: pip install pytest-repeat @pytest.mark.repeat(n)执行当前用例 n 次 然后再往下执行其他用例 im ...
- Nextcloud报 PHP zip 模块未安装
wget https://pecl.php.net/get/zip自动下载最新包 tar xf zip-1.20.0.tgz cd zip-1.20.0/ phpize 报错system libzip ...
- 分享至: 日本神話の考古学.PDF
书本详情 日本神話の考古学 种类:Languages - General & Miscellaneous Languages - Reference年:1993出版社:朝日新聞社语言:japa ...
- SQL面试题,工作整理sql
一.数据库和算法 表名:student,name,course,score 张青 语文 72 王华 数学72 张华 英语 81 张青 物理 671.用sql查询出& ...
- docker登录Ubuntu出现error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`的解决方法
命令行登录docker时,在Ubuntu 18.04下可能会出现 error storing credentials - err: exit status 1, out: `Cannot autola ...
- 剑指 Offer II 堆
059. 数据流的第 K 大数值 class KthLargest { public: priority_queue<int,vector<int>,greater<int&g ...
- [笔记] Android开发中的gradle是什么?
gradle是什么? 先看下文档中的介绍 https://docs.gradle.org/current/userguide/what_is_gradle.html Gradle is an op ...
- json 解析,JSON数组
public class resuleobj { public int returncode { get; set; } public string message { get; set; } pub ...
- 本地搭建JupyterNotebook开发环境
背景 Jupyter 是一款优秀的编程语言运行环境包括Hub.Lab.Notebook等优秀自项目,JupyterNotebook是衍生的在线交互运行平台的前端项目 环境 Windows 11 Nod ...
- 浅谈Redis与分布式锁
为什么需要分布式锁 Redis如何实现分布式锁 如何避免死锁? 锁被别人释放怎么办? 锁过期时间不好评估怎么办? Redlock 真的安全吗 为什么要在多个实例上加锁? 为什么大多数实例加锁成功,才算 ...