java 时间转为毫秒数_疫情期间面试总结一(java基础方面)
一、线程池关键参数以及运行原理
1、corePoolSize(核心线程数):线程池中线程的核心数量,线程池创建后池中并没有线程,而是等有任务的时候才去创建线程,如果任务过多并且核心线程数已经用完,则新加入的任务会被放入等待队列。
2、maximumPoolSize(最大线程数):一个重要的参数,表明池中所允许的最大线程数。
3、keepAliveTime(线程保持存活时间):线程在没有任务可执行的时候能保持多久时间会终止
4、TimeUnit(线程保持的时间单位):
TimeUnit.DAYS; //天
TimeUnit.HOURS; //小时
TimeUnit.MINUTES; //分钟
TimeUnit.SECONDS; //秒
TimeUnit.MILLISECONDS; //毫秒
TimeUnit.MICROSECONDS; //微妙
TimeUnit.NANOSECONDS; //纳秒
5、workQueue(任务等待队列):线程池中线程都在忙时,新加入的任务无法被执行时会放入此队列,等待被执行。当线程池中的线程执行完当前任务后,会从等待队列取出任务去执行。
6、RejectedExecutionHandler(拒绝策略):当等待队列已满并且线程数也达到了最大数,线程池就会根据拒绝策略执行后续操作,默认的是AbortPolicy。
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务
运行原理如下图:
![](/assets/blank.gif)
线程池原理图
1、新加入的任务去判断核心线程数是否已达标,否就去创建线程执行任务。是就去看任务队列是否加满,任务队列没有满就把新的任务加入到队列中等待执行,满的话就去判断最大线程数量是否达到,最大线程数没有达到就去创建新的线程执行任务,否则采用饱和策略来处理。
二、线程池有几种类型
JDK给我们提供了很方便的线程池工厂类Executors,提供了四种线程池。
1.cachedThreadPool 一个任务一个线程,适合I/O操作多的任务.
2.fixedThreadPool 核心池大小固定,适合处理快的任务.
3.singleThreadPool 只有一个thread处理所有的任务(SynchronousQueue).
4.scheduledThreadPool 可以定时,周期的执行任务(DelayQueue)
阿里巴巴Java开发手册里就明确不允许使用Executors创建线程池,一定要通过 ThreadPoolExecutor(xx,xx,xx...) 来明确线程池的运行规则,指定更合理的参数。
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
其实Executors工厂类的底层最终都是通过 new ThreadPoolExecutor() ExecutorService 实例。
三、happen-before原则
1、单线程happen-before原则:在同一个线程中,书写在前面的操作happen-before后面的操作。
2、锁的happen-before原则:同一个锁的解锁操作happen-before此锁的加锁操作。
3、volatile的happen-before原则:对一个volatile变量的写操作happen-before对此变量的任意后续操作。
4、happen-before的传递性原则:如果A操作 happen-before B操作,B操作happen-before C操作,那么A操作happen-before C操作。
5、线程启动的happen-before原则:同一个线程的start方法happen-before此线程的其它方法。
6、线程中断的happen-before原则:对线程interrupt方法的调用happen-before被中断线程的检测到中断发送的代码。
7、线程终结的happen-before原则:线程中的所有操作都happen-before线程的终止检测。
8、对象创建的happen-before原则:一个对象的初始化完成先于他的finalize方法调用。
四、equals()与==
==:判断两个对象的内存地址是否一样(两个对象是否一样,基本数据类型比较的是值,引用类型比较的是内存地址)
equals()为object类的方法:
1、该方法没有被覆盖重写的话,等价于==
2、该方法被覆盖重写的话,一般用于比较两个对象内容是否一样,典型的就是String的equals()方法被覆盖过,比较的是值。
五、String、StringBuffer、StringBuild
是否可变:
String为final修饰的类,所以是不可变的,对其值的修改,相当于重新创建了一个String对象。
StringBuffer、StringBuild都是可变的字符串缓冲区,可以通过append()方法追加字符串修改值,通过toString()转为String。
安全性:
String为final修饰的,不可变所以在多线程中是安全的。
StringBuffer中的方法有synchronized修饰,所以先线程安全的。StringBuild是非线程安全的,所以性能上相对较好。
六、volatile关键字
1、保持共享变量内存可见性:每次操作volatile变量时,都会去主存中读取最新值并且操作完成后直接把最新值刷回主存,以便其他线程能读取到最新值。
2、防止指令重排序
七、synchronized与ReentrantLock的区别
1、都是可重入锁
可重入锁:自己可以再次获得自己的内部锁。(一个线程获取了某个对象的锁,如果还没有释放锁,其再次获取该对象的锁还是可以获取到的)
2、synchronized是jvm级别锁,而ReentrantLock是JDK提供的一个API(在使用锁的地方需要显示lock()和unlock()并配合try-catch-finally语句块来使用)
3、ReentrankLock锁可实现公平锁、等待可中断、可响应中断请求等机制。
八、list、set、map区别
list:存放有序,可重复元素
set存放不可重复的元素
map:key-value存储,map会根据key来存放值,key不能重复,两个不同的key可以存储相同的元素。
九、Arraylist、Vector的区别
相同点:
1、都是基于数组,根据下标索引可对元素进行随机访问
2、都能保证插入顺序
3、都允许存放null值
不同点
1、Vector是线程安全的,ArrayList非线程安全,所以效率上ArrayList要优
2、ArrayList可借助Collections工具类中的synchronizedList转为线程安全list
十、HashMap、HashTable的区别
1、HashMap是非线程安全的。HashTable是线程安全的,其内部方法有synchronized修饰,所以效率上HashMap要优于HashTable。
2、HashMap中可以存在null键,null值,但null键只能有一个,null可以有多个。HashTable不允许存在null键值,否则会报空指针
3、JDK1.8后,HashMap在解决hash冲突时,在链表长度达到阈值(8)的时候,链表会转为红黑树。HashTable没有这样的机制
说明:HashTable基本上被淘汰了,很少使用了,如果要用线程安全的Map,推荐ConcurrentHashMap(分段所技术实现的并发map,并发环境中效率更高)
java 时间转为毫秒数_疫情期间面试总结一(java基础方面)相关推荐
- java 获取当前时间的毫秒数
记录一下关于获取当前时间毫秒数的三种方法 /*** 获取当前时间的毫秒数* @author laziji**/ public class Test{public static void main(St ...
- php记录当前毫秒,php获取当前时间的毫秒数的方法
php获取当前时间的毫秒数的方法 php本身没有提供返回毫秒数的函数,但提供了一个microtime()函数,该函数返回一个array,包含两个元素,一个是秒数,一个是小数表示的毫秒数,借助此函数,可 ...
- linux mysql udf打包_Linux下MySQL 5.1编写UDF 并运行(Install)获取当前时间的毫秒数...
Mysql 无法获取当前时间的毫秒数自行定制UDF,以提供current_ms方法1. 编写 C 文件#ifdef STANDARD#include lt;stdio.hgt;#inc Mysql 无 ...
- php得到时间 毫秒数,php获取毫秒_php获取当前时间的毫秒数
摘要 腾兴网为您分享:php获取当前时间的毫秒数,中信金通,中日翻译,中国天气,夜读小说等软件知识,以及2265游戏盒,球球大作战,美业店务,黑手党3,互联空间,文本文档软件,upx脱壳,兔小贝儿歌, ...
- php 计算时间毫秒数,php获取毫秒_php获取当前时间的毫秒数
摘要 腾兴网为您分享:php获取当前时间的毫秒数,夜读小说,虚拟按键,唯品会,调音器等软件知识,以及闪优360手柄,中国干部,大连快线,免vip网站,台达温控器,手淘链接转换,赢顺云期货交易,音序器, ...
- php 时间格式 毫秒,php获取当前时间的毫秒数详解
php获取当前时间的毫秒数详解 var runtimes = 0; function GetRTime(){ var nMS = <?php echo $lefttime; ?>*1000 ...
- 常用时间格式毫秒数、年月日、国际通用时间之间相互转换(常用)
JS实现时间格式毫秒数.年月日.国际通用时间转换 写在前面 1.毫秒数转年月日格式 2.国际通用时间转年月日格式 3.年月日格式换毫秒数 写在前面 本篇文章主要介绍JS实现毫秒数.年月日时间.国际通用 ...
- 获取时间戳(1970年1月1日零点整至当前时间的毫秒数)
C# 时间戳格式一 /// <summary>/// 获取时间戳(1970年1月1日零点整至当前时间的毫秒数)/// </summary>/// <returns> ...
- new date.gettime 与传入时间相差毫秒数不对_给女票解释为什么日本时间比中国时间快一个小时?...
马上就要五一劳动节放假了,忙碌了半年,准备趁着假期出去放松放松,于是开始准备行程.女朋友听说日本5月份可以看樱花,于是她在看去日本的航班.我在旁边默默的看了下我的信用卡额度. 如上图,飞机13:40 ...
最新文章
- android canvas 保存图片,ionic3 html5 video 抓图保存到手机相册,解决Android手机不支持Canvas drawImage问题...
- php exit、return、break、continue之间的差别,具体介绍
- shell实现矩阵转置
- SSH-permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
- 炫天塔罗占卜结果......
- html5怎么让div集中,html – 如何集中5个div而不使用margin-left?
- go语言 gosched
- 投资公司的钱是自己的吗?
- Matlab 之GUIDE界面设计:不同函数之间使用相同变量
- 一个老程序员“伯伯”的独白
- mysql check约束无效
- ROS 端口IP映射 动态IP映射
- 十大编程语言_2020年十大最佳编程语言
- 基于Multisim的简易数字钟
- mysql与gbase获取行号_mysql/gbase数据库全库库表记录数统计
- copypng emitted errors
- Excel自动转曲线图的时PHP,Excel折线图随着数据的插入动态变化,掌握此技能的人不足1﹪!...
- java 三维_java之三维数组
- Google搜索时如何在新标签页打开搜索结果
- php把buffer转化为图片_长微博生成(将html转化为图片)原理浅析