JAVA面试题
文章平均质量分 94
JAVA面试题
Wonder-King
有好奇心,什么都想学一点。
展开
-
阿里春招笔试题-快速N次幂
时间复杂度O(logn)public static int getPower(int k, int N) { if(N==0) return 1; long temp = k; long res = 1; for(int i=N;i>0;){ if((i&1)!=0){ res *=temp; } .原创 2020-07-31 20:02:33 · 185 阅读 · 0 评论 -
链式编程+流式计算 一个小题目
package main.test;import java.util.Arrays;import java.util.List;/** * @Auther: wdq * @Date: 2020/4/21 15:44 * @Description:筛选出编号偶数并且年龄大于25的人,要求把名字大写并逆序输出第一个人。 */class User{ private Strin...原创 2020-04-21 17:11:51 · 311 阅读 · 0 评论 -
函数式接口的用途(Function、Predicate、Consumer、Supplier)
package main.test;import java.util.function.Consumer;import java.util.function.Function;import java.util.function.Predicate;import java.util.function.Supplier;/** * @Auther: wdq * @Date: ...原创 2020-04-21 16:33:32 · 893 阅读 · 0 评论 -
ExecutorService线程池+七大参数源码分析+自定义线程池
例子:10年前单核CPU电脑,假的多线程,像马戏团小丑玩多个球,CPU需要来回切换。现在是多核电脑,多个线程各自跑在独立的CPU上,不用切换效率高。线程池的优势:线程池做的工作只要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。它的主要特点为:线程复用;...原创 2020-04-21 11:34:41 · 1609 阅读 · 0 评论 -
BlockingQueue
在多线程领域:所谓堵塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤起。为什么需要Blockingqueue:好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为一切Blockingqueue都给你一手包办了。在concurrent包发布之前,多线程环境下,我们每个程序员需要去自己控制这些细节,还要兼顾效率和线程安全,而这会给我们的程序带来不...原创 2020-04-21 10:46:12 · 111 阅读 · 0 评论 -
JUC的辅助类--CountDownLatch、CyclicBarrier、Semaphore
CountDownLatch用法题目:6个人同学和班长再教室,让6个同学先出去,班长最后出去然后锁门。package main.test;import java.util.concurrent.CountDownLatch;/** * @Auther: wdq * @Date: 2020/4/20 15:00 * @Description: */public cla...原创 2020-04-20 15:56:18 · 170 阅读 · 0 评论 -
Callable和runnable的区别
1、是否有返回值2、是否需要泛型3、是否抛异常4、落地方法不一样,一个是run,一个是call //创建新类MyThread实现runnable接口class MyThread implements Runnable{ @Override public void run() { }}//新类MyThread2实现callable接口class MyThread2...原创 2020-04-20 14:50:13 · 858 阅读 · 0 评论 -
HashMap的底层剖析
HashMap的底层数据结构是node类型的数组+链表+红黑树(JDK1.8增加了红黑树部分)。static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16是hashmap初始的长度,如果长度超过16,就会左移一位,即变成32。一般new的时候会修改它的大小(要够用),省去扩容的时间。static fi...原创 2020-04-20 11:37:05 · 231 阅读 · 0 评论 -
HashSet的底层剖析
HashSet的底层HashMap。问题:为什么HashMap添加元素填进去的是两个值key和value,而HashSet只填进去一个值呢?是不是HashSet的底层并非HashMap?回答:并不是。HashSet的底层就是HashMap。看HashSet的部分源码:private static final Object PRESENT = new Object(); ...原创 2020-04-20 10:31:10 · 233 阅读 · 0 评论 -
list线程不安全(举例说明+三种解决)
package main.test;import java.util.ArrayList;import java.util.List;/** * @Auther: wdq * @Date: 2020/4/20 08:57 * @Description: */public class ListnoSafe { public static void main(String...原创 2020-04-20 10:22:52 · 5268 阅读 · 1 评论 -
多线程编程:synchronized和lock的对比
纵向对比:synchronized wait() notifyAll() | | |ReentrantLock condition.await() condition.signalAll() 实例对比:题目:四个人控制一个空调开关...原创 2020-04-19 18:13:25 · 133 阅读 · 0 评论 -
多线程之间的交互编程(虚假唤醒)
结论:1、高聚低合前提下,线程操作资源类2、判断/干活/通知3、多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)题目:一个空调,两个人,一人关,一人开,交替进行。package main.test;/** * @Auther: wdq * @Date: 2020/4/19 15:53 * @Description: */...原创 2020-04-19 17:25:37 · 260 阅读 · 0 评论 -
Intellij IDEA自定义类模板和方法模板
依次打开File->Settings->File and Code Templates->Files,可修改class需要创建的等模板依次打开File->Settings->Live Templates新建组,组名随便,然后再在组名下添加template...原创 2020-04-19 15:57:15 · 299 阅读 · 0 评论 -
lambda表达式
1、口诀:拷贝小括号,写死右箭头,落地大括号2、@FunctionalInterface3、default(java8以前,接口里不能有实现的方法,java8以后,可以在接口里有实现的方法)可以有多个default4、静态方法实现package main.test;@FunctionalInterface//函数式接口,必须满足接口只有一个方法。 //当一个接口的...原创 2020-04-19 15:19:52 · 157 阅读 · 0 评论 -
线程的状态
Thread.State原创 2020-04-19 15:02:29 · 109 阅读 · 0 评论 -
GC(分代收集算法)
次数上频繁收集Young区次数上较少收集Old区基本不动元空间四大算法:1、引用计数法;2、复制算法;新生代-不存在内存碎片,但占内存3、标记清除;老年代-耗时,有内存碎片,不占内存4、标记压缩;老年代-不占内存,耗时,移动对象的成本分代收集算法----------根据不同的代,用不同的算法小总结:内存效率(时间复杂度):复制算法>标记清除&g...原创 2020-04-19 09:39:51 · 229 阅读 · 0 评论 -
MySQL骚知识(索引优化、查询截取分析、MySQL锁机制、主从复制)
目录1前言2索引优化分析2.1问题2.2常见通用的Join查询⭐2.3手写和机读的不同2.4索引2.4.1索引的定义2.4.2索引的优势和劣势2.4.3索引分类2.4.4索引结构2.4.5哪些情况需要建索引2.5性能分析2.5.1MySQL Query Optimizer2.5.2MySQL常见的瓶颈2.5.3Explain⭐2.5....原创 2020-04-13 15:21:23 · 506 阅读 · 1 评论 -
Redis如何持久化?
RDBrdb保存的是dump.rdb文件。在指定的时间间隔内将内存中的数据快照写入磁盘,也就是行话中的快照,它恢复时是将快照文件直接读到内存。这个快照就是dump.rdbRedis会单独创建(fork)一个子进程来进行持久化。会先将数据写到一个临时文件中。待持久化过程都结束了,在用这个文件替代上次持久化好的文件,主进程是不任何的IO操作的,这就保持了很高的性能。如果需要...原创 2020-04-11 19:51:29 · 152 阅读 · 0 评论 -
centos7关闭防火墙命令
使用命令:systemctl status firewalld.service查看防火墙状态如果是active(running),说明在防火墙运作在查看防火墙的状态:disavtive(dead),表示关闭了(重启之后还会打开)。...原创 2020-04-09 17:29:45 · 709 阅读 · 0 评论 -
负载均衡算法知识总结
负载均衡之随机算法(Random)第1个情况:假定有10个性能相同的服务器,随机生成随机数(1-10),来选择去使用哪一个服务器。第2个情况:假定有10个服务器,每个服务器都有权重(表示服务器的性能),10个服务器的总权重之和假设为100。将这10个服务器根据权重放在x坐标轴上,权重越大,服务器在坐标轴上的范围越大,刚好组成了x1-x100,比如第五个服务器的范围是x36-x7...原创 2020-04-09 14:36:47 · 607 阅读 · 0 评论 -
Nginx知识总结
1、什么的nginx?Nginx是高性能的HTTP和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,由报告表明能支持高达50000哥并发连接数。在实际的使用中,tomcat大约能支持500个并发连接数,nginx大约能支持5000个并发连接数2.1、正向代理需要在客户端配置代理服务器进行指定网站访问2.2、反向代理客户端将请求发送给反向代理服务器,由反向...原创 2020-04-09 11:05:23 · 372 阅读 · 0 评论 -
简单的谈一下SpringMVC的工作流程
请求过来之后,先到达DispatcherServlet,然后中央控制器会调用处理器映射器找到处理器,调用HandleMapping的一个方法,得到HandleExecutionChain对象,这个对象包含所有的处理器拦截器和处理器对象。由HandlerAdapter处理器适配器来找对应的处理器来处理我们的请求,从处理器的方法中得到ModelAndView对象,然后返回到中央控制器,...原创 2020-04-08 21:16:07 · 487 阅读 · 0 评论 -
SpringMVC解决POST和GET请求中文乱码问题
POST请求中文乱码问题:使用CharacterEncodingFilter这个过滤器在xml文件里配置encoding为utf-8即可<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework...原创 2020-04-08 20:40:07 · 469 阅读 · 0 评论 -
请简单介绍Spring支持的常用数据库事务传播属性和事务隔离级别
数据库事务传播属性:事务传播属性可以在@Transaction注解的propagation属性中定义传播属性 描述 REQUIRED 如果有事务再运行,当前的方法就再这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行 REQUIRES_NEW 当前的方法必须启动新事务,并在它自己的事务内运行。如果有事务正在运行就将它挂起 SUPPORTS 如...原创 2020-04-08 20:24:23 · 156 阅读 · 0 评论 -
类初始化(<clinit>),类实例化(<init>)和方法重写(override)的理解
考点:对类初始化(<clinit>()),类实例化(<init>())和方法重写(override)的理解。题目:main方法的输出结果是什么?/* * 父类的初始化<clinit>: * (1)j = method(); * (2)父类的静态代码块 * * 父类的实例化方法: * (1)super()(最前) * (2)i ...原创 2020-04-08 14:59:49 · 469 阅读 · 0 评论 -
Singleton(单例模式)
/** * 单例模式(singleton) * 1、某个类只有一个实例 * 构造器私有化 * 2、它必须自行创建这个实例 * 用一个常量来存储 * 3、它必须向整个系统提供这个实例 * 向外提供获取这个实例的方式 * (1)直接暴露 * (2)用静态变量的get方法获取 * * */package singleton;public c...原创 2020-04-08 11:31:57 · 241 阅读 · 0 评论