Java面试基础
「已注销」
2018.10.10努力加油,一切都会越来越好
展开
-
finalize和finally傻傻分不清楚
一. finalize 用途答: 垃圾回收器(garbage colector)决定回收某对象时, 就会运行该对象的 finalize()方法 但是在 Java 中很不幸, 如果内存总是充足的, 那么垃圾回收可能永远不会进行, 也就是说 filalize()可能永远不被执行, 显然指望它做收尾工作是靠不住的。 那么 finalize()究竟是做什么的呢? 它最主要的用途是回收特殊渠道申请的内存。...原创 2018-11-09 11:09:58 · 159 阅读 · 0 评论 -
手写单例模式
//双检锁public class Singleton { private static volatile Singleton singleton; private Singleton() {} public static Singleton getInstance() { if (singleton == null) { s...原创 2019-02-22 19:34:19 · 1354 阅读 · 0 评论 -
lambda表达式与函数式接口
在java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的。对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没有什么特殊的地方。为了确保函数式接口的正确性,我们可以给这个接口添加@FunctionalInterface注解(当然,也可以不加此注解),这样当其中有超过一个抽象方法时就会报错。对于其他类型的接口,我们想要使用就需要定义一个类(或者使...原创 2019-02-13 16:57:21 · 405 阅读 · 0 评论 -
Java传递
无论是值传递还是引用传递,其实都是一种求值策略(Evaluation strategy)。在求值策略中,还有一种叫做按共享传递(call by sharing)。其实Java中的参数传递严格意义上说应该是按共享传递。按共享传递,是指在调用函数时,传递给函数的是实参的地址的拷贝(如果实参在栈中,则直接拷贝该值)。在函数内部对参数进行操作时,需要先拷贝的地址寻找到具体的值,再进行操作。如果该值在栈中...原创 2019-03-01 14:52:07 · 171 阅读 · 0 评论 -
notify不立刻释放锁
当方法wait()被执行后,锁自动被释放,但执行完notify()方法后,锁不会自动释放。必须执行完notify()方法所在的synchronized代码块后才释放。原创 2019-02-26 15:43:53 · 1955 阅读 · 0 评论 -
this逃逸
Executor 框架是Java5之后引进的,在Java 5之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。this逃逸是指在构造函数返回之前其他线程就持有该对象的引用. 调用尚未构造完全的对象的方法可能引发令人疑惑的错误。...原创 2019-02-26 17:29:00 · 289 阅读 · 1 评论 -
索引
创建高性能索引:B-Tree索引:如果不是按索引的最左列开始查找,索引无效不能跳过索引的列如果查询中有某个列的范围查询,则其右边所有列都无法使用索引查找哈希索引:一般是等值查找INNODB有一个自适应哈希索引...原创 2019-02-21 12:57:39 · 77 阅读 · 0 评论 -
Leetcode32最长有效括号
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”class Solution { public int longestValidParentheses(String s) { if(s==null||s.length()==0)//很自然的想到用栈 ...原创 2019-02-26 23:20:43 · 305 阅读 · 0 评论 -
select/poll/epoll
epoll重大改进:支持一个进程打开的socket描述符不受限IO效率不会随着FD的数目增加而线性下降使用mmap加速内核与用户空间的消息传递api更加简单原创 2019-02-27 00:13:03 · 92 阅读 · 0 评论 -
ThreadLocal内存泄漏
为什么使用弱引用?key 使用强引用:引用的ThreadLocal的对象被回收了,但是ThreadLocalMap还持有ThreadLocal的强引用,如果没有手动删除,ThreadLocal不会被回收,导致Entry内存泄漏。key 使用弱引用:引用的ThreadLocal的对象被回收了,由于ThreadLocalMap持有ThreadLocal的弱引用,即使没有手动删除,ThreadLoc...原创 2019-02-27 08:55:59 · 233 阅读 · 0 评论 -
统计一个字符串字符出现最多的次数
public class test { public static void main(String[] args) { System.out.println(findMaxValue("abcda")); } public static Character findMaxValue(String str){ if (str == null ...原创 2019-03-13 21:17:43 · 1329 阅读 · 1 评论 -
LeetCode24两两交换链表节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3./** * Definition for singly-linked list. * public class ListNode { * int val...原创 2019-03-13 22:01:59 · 222 阅读 · 0 评论 -
序列化二叉树
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/import java.util.Queue;import java....原创 2019-03-06 22:43:34 · 88 阅读 · 0 评论 -
Threadlocal
最后来做个总结吧,可能泄露的场景仅且仅在:线程run方法结束后没有显示的调用remove进行清理线程在线程池的模式下,一直重复运行原创 2019-03-11 23:05:39 · 121 阅读 · 0 评论 -
阿里面试题——多线程
package BINGFA;import java.util.concurrent.atomic.AtomicInteger;//有三个线程ID分别是A、B、C,请用多线编程实现,在屏幕上循环打印10次ABCABC//请补充以下代码public class Test { public static void main(String[] args) { ...原创 2019-03-27 00:13:13 · 298 阅读 · 0 评论 -
count(*)和count(字段名)和count(1)
1,比较count(*)和count(字段名)的区别:前者对行的数目进行计算,包含null,后者对特定的列的值具有的行数进行计算,不包含null,得到的结果将是除去值为null和重复数据后的结果。2.count(1)跟count(主键)一样,只扫描主键3.count(*)和count(主键)使用方式一样,但是在性能上有略微的区别,mysql对前者做了优化。count(主键)不一定比count...原创 2019-02-22 13:47:41 · 27017 阅读 · 2 评论 -
finally到底是在return之前执行还是return之后执行?
finally是在retrun语句执行后,return返回之前执行的,也就是说finally必执行(当然是建立在try执行的基础上)finally中修改的基本类型没有return是不影响返回结果的,有了retrun才会影响finally中修改list ,map,set引用类型时,就算没有return,也是是影响返回结果的...原创 2019-01-12 11:32:28 · 1339 阅读 · 0 评论 -
负载均衡
负载均衡的几种技术1.HTTP重定向,重定向302状态码,性能比较差,一般不采用2.DNS域名解析负载均衡,利用DNS作为第一级的负载均衡。3.反向代理服务器,通常位于web服务器前面,反向代理服务器需要配置双网卡和内部外部两套IP地址。优点是部署简单,缺点是可能成为性能瓶颈。4。IP负载均衡:受制于服务器网卡带宽,对于提供下载服务或者视频服务需要传输大量数据网站而言,难以满足需求。(能不...原创 2018-11-20 11:38:51 · 323 阅读 · 0 评论 -
equal和==
java中equals方法和“==”的区别:equals 方法是 java.lang.Object 类的方法。有两种用法说明:(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。比如:String s1,s2,s3 = “abc”,...转载 2018-11-09 11:30:45 · 6084 阅读 · 0 评论 -
一篇文章彻底读懂HashMap之HashMap源码解析(上)
就身边同学的经历来看,HashMap是求职面试中名副其实的“明星”,基本上每一加公司的面试多多少少都有问到HashMap的底层实现原理、源码等相关问题。 在秋招面试准备过程中,博主阅读过很多关于HashMap源码分析的文章,漫长的拼凑式阅读之后,博主没有看到过一篇能够通俗易懂、透彻讲解HashMap源码的文章(可能是博主没有找到)。秋招结束后,国庆假期抽空写下了这篇文章...转载 2018-11-09 14:59:50 · 361 阅读 · 0 评论 -
一篇文章彻底读懂HashMap之HashMap源码解析(下)
put函数源码解析//put函数入口,两个参数:key和valuepublic V put(K key, V value) { /*下面分析这个函数,注意前3个参数,后面 2个参数这里不太重要,因为所有的put 操作后面的2个参数默认值都一样 */ return putVal(hash(key), key, value, false...转载 2018-11-09 15:04:45 · 480 阅读 · 1 评论 -
一篇文章彻底搞定所有GC面试问题
众所周知,在C++,内存的管理是程序员的任务,包括对象的创建和回收(内存的申请和释放),而在java中,我们可以通过以下四种方式创建对象(面试考点):new关键字创建对象clone方法克隆产生对象反序列化获得对象通过反射创建对象而在java中对象的回收主要是GC完成:GC会在合适的时间被触发,完成垃圾回收,将不需要的内存空间回收释放,避免无限制的内存增长导致的OOM。由此可以看出,GC在...转载 2018-11-09 15:59:17 · 1795 阅读 · 0 评论 -
fail-fast和fail-safe
fail-fast和fail-safe一: 快速失败( fail—fast)在用迭代器遍历一个集合对象时, 如果遍历过程中对集合对象的内容进行了修改( 增加、 删除、 修改) , 则会抛出 Concurrent Modification Exception。原理: 迭代器在遍历时直接访问集合中的内容, 并且在遍历过程中使用一个 modCount 变量。 集合在被遍历期间如果内容发生变化, 就会...原创 2018-11-10 07:41:08 · 167 阅读 · 0 评论 -
接口和抽象类
1.接口和抽象类的区别1, 抽象类里可以有构造方法, 而接口内不能有构造方法。2, 抽象类中可以有普通成员变量, 而接口中不能有普通成员变量。3, 抽象类中可以包含非抽象的普通方法, 而接口中所有的方法必须是抽象的, 不能有非抽象的普通方法。4, 抽象类中的抽象方法的访问类型可以是public , protected和private,但接口中的抽象方法只能是public类型的, 并且默...原创 2018-11-10 11:24:29 · 111 阅读 · 0 评论 -
Java方法返回值前面的<T>是啥?
Java方法返回值前面的是什么?它的作用是“定义泛型”一段简单的代码class Show<T> { public void print1(T t) { System.out.println(t); } public <T> void print2(T t) { System.out.println(t); }}public class Demo...转载 2018-11-10 15:30:33 · 1149 阅读 · 0 评论 -
Map
Map接口规范了Map数据结构的通用API(也含有几个用于简化操作的default方法,default是JDK8的新特性,它是接口中声明的方法的默认实现,即非抽象方法)并且还在内部定义了Entry接口(键值对的实体类),在JDK中提供的所有Map数据结构都实现了Map接口,下面为Map接口的源码(代码中的注释太长了,基本都是些实现的规范,为了篇幅我就尽量省略了)。package java.uti...转载 2018-11-13 12:38:36 · 163 阅读 · 2 评论 -
四种引用
WeakHashMap是一个基于Map接口实现的散列表,实现细节与HashMap类似(都有负载因子、散列函数等等,但没有HashMap那么多优化手段),它的特殊之处在于每个key都是一个弱引用。首先我们要明白什么是弱引用,Java将引用分为四类(从JDK1.2开始),强度依次逐渐减弱:强引用: 就是平常使用的普通引用对象,例如Object obj = new Object(),这就是一个强引用...原创 2018-11-13 14:55:37 · 110 阅读 · 0 评论 -
Collections.sort 内部原理
Collections.sort 排序通过泛化实现对所有类型的排序,对于基础类型,如int,string按照字符表,数字大小排序,对于自定义类型,通过实现Comparable接口,重写compareto函数自定义比较大小的方式,接受对象类型 extends Comparable<? super T>或者Comparator外比较器,Comparable接口的方式比实现Comparato...原创 2018-11-13 15:45:14 · 3006 阅读 · 1 评论 -
Vector/Arraylist/LinkedList
一. ArrayList 与 LinkedList 区别ArrayList 和 LinkedList 都实现了 List 接口, 他们有以下的不同点:ArrayList 是基于索引的数据接口, 它的底层是数组。 它可以以 O(1)时间复杂度对元素进行随机访问。 与此对应, LinkedList 是以元素列表的形式存储它的数据, 每一个元素都和它的前一个和后一个元素链接在一起, 在这种情况下, ...原创 2018-11-13 16:03:30 · 712 阅读 · 0 评论 -
volatile
volatile关键字保证了多线程环境下变量的可见性与有序性,底层实现基于内存屏障(Memory Barrier)。为了优化性能,现代CPU工作时的指令执行顺序与应用程序的代码顺序其实是不一致的(有些编译器也会进行这种优化),也就是所谓的乱序执行技术。乱序执行可以提高CPU流水线的工作效率,只要保证数据符合程序逻辑上的正确性即可(遵循happens-before原则)。不过如今是多核时代,如果随...转载 2018-11-13 16:49:53 · 106 阅读 · 0 评论 -
token
token主要有两个作用:①:防止表单重复提交(防止表单重复提交一般还是使用前后端都限制的方式,比如:在前端点击提交之后,将按钮置为灰色,不可再次点击,然后客户端和服务端的token各自独立存储,客户端存储在Cookie或者Form的隐藏域(放在Form隐藏域中的时候,需要每个表单)中,服务端存储在Session(单机系统中可以使用)或者其他缓存系统(分布式系统可以使用)中。使用基于 Token...原创 2018-11-22 16:20:36 · 257 阅读 · 0 评论 -
一分钟理解post和put(安全与幂等角度)
HTTP方法的安全性和幂等性可以认为安全的方法都是只读的方法(GET, HEAD, OPTIONS),不会改变资源状态,显然,这三个方法也是幂等的。DELETE方法的语义表示删除服务器上的一个资源,第一次删除成功后该资源就不存在了,资源状态改变了,所以DELETE方法不具备安全特性。然而HTTP协议规定DELETE方法是幂等的,每次删除该资源都要返回状态码200 OK,服务器端要实现幂等的DE...原创 2018-11-22 22:25:46 · 6922 阅读 · 0 评论