面试题:已看1

面试题
1、String和StringBuffer的区别
2、gc的概念,如果A和B对象循环引用,是否可以被GC?
3、Java中的内存溢出是如何造成的

 Java堆溢出

1.1 模拟场景

Java堆用于存储对象,只要不断的创建对象,并保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,

那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。

2.虚拟机栈和本地方法栈溢出

HotSpot虚拟机中不区分虚拟机栈和本地方法栈。栈容量用-Xss参数设定。Java虚拟机规范中描述了两种异常:

  • 如果线程请求的栈深度大于虚拟机锁允许的最大深度,将抛出StackOverflowError异常。
  • 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。
  • 3.方法区和运行时常量池溢出

    3.1 运行时常量区溢出


4、String s = “123”;这个语句有几个对象产生
5、Error、Exception和RuntimeExcepti

on的区别,作用又是什么?
6、列举3个以上的RuntimeException
7、reader和inputstream区别
8、hashCode的作用

以上这段官方文档的定义,我们可以抽出成以下几个关键点:

 

1、hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;

2、如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;

3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;

4、两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。


9、Object类中有哪些方法,列举3个以上(可以引导)
10、char型变量中能不能存贮一个中文汉字?为什么?
11、列举几个Java Collection类库中的常用类
12、List、Set、Map是否都继承自Collection接口?
13、HashMap和Hashtable的区别
14、HashMap中是否任何对象都可以做为key,用户自定义对象做为key有没有什么要求?

可以、但是要key对象必须是不可变的对象,不然在Entry被插入Map中后,再改变key值,会导致当前key值与hash值不符合,即与数组索引不符,将无法被查找到
15、interface 和 abstrat class的区别 是否可以继承多个接口,是否可以继承多个抽象类
16、 启动一个线程是用run()还是start()? 多线程有几种实现 同步和并发是如何解决的 什么叫守护线程,用什么方法实现守护线程(Thread.setDeamon()的含义) 如何停止一个线程? 解释是一下什么是线程安全?举例说明一个线程不安全的例子。解释Synchronized关键字的作用。 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

后台线程如其名,就是在后台工作的线程,它的任务是为其他线程提供服务,也叫做“守护线程”与“精灵线程”。通过在start()方法调用前,调用setDeamon(true)方法,将线程设置为后台线程。后台线程会在前台线程死亡后由JVM通知死亡。

后台线程最大的应用就是垃圾回收线程,它是一个典型的后台线程。
两个线程对一个变量进行操作,但是没有上锁,即没有进行同步操作,就像买车票的时候多个窗口一起卖,但是车票数没有减去。车票被重复卖出
。就是不安全。还有,被多个线程操作的变量改为静态量加static,才安全


17、了解过哪些JDK8的新特性,举例描述下相应的特性?
18、对sql进行优化的原则有哪些?

https://www.cnblogs.com/xiaomifeng/p/4655317.html

20、StringBuffer有什么优势?为什么快?

StringBuffer是可以改变的字符串,而String是不可改变的。每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,就要为该对象分配新的空间。当要对字符串重复修改时,创建新的String对象相关的系统开销很大,就是要修改字符串而不创建新的对象,则用StringBuffer

other
谈谈你对HashMap的理解,底层原理的基本实现,HashMap怎么解决碰撞问题的?
开发中用了那些数据库?回答mysql,储存引擎有哪些?然后问了我悲观锁和乐观锁问题使用场景、分布式集群实现的原理。
springmvc和mybatis的工作原理,有没有看过底层源码?
熟悉IO么?与NIO的区别,阻塞与非阻塞的区别
微信红包怎么实现。

 

抢红包过程

当有人在群里发了一个N人的红包,总金额M元,后台大概发生的事情如下:

一、发红包后台操作:

  1. 在数据库中增加一条红包记录,存储到CKV,设置过期时间;

  2. 在Cache(可能是腾讯内部kv数据库,基于内存,有落地,有内核态网络处理模块,以内核模块形式提供服务))中增加一条记录,存储抢红包的人数N

二、抢红包后台操作:

  1. 抢红包分为抢和拆,抢操作在Cache层完成,通过原子减操作进行红包数递减,到0 就说明抢光了,最终实际进入后台拆操作的量不大,通过操作的分离将无效请求直接挡在Cache层外面。这里的原子减操作并不是真正意义上的原子减操作,是 其Cache层提供的CAS,通过比较版本号不断尝试,存在一定程度上的冲突,冲突的用户会放行,让其进入下一步拆的操作,这也解释了为啥有用户抢到了拆 开发现领完了的情况。

  2. 拆红包在数据库完成,通过数据库的事务操作累加已经领取的个数和金额,插入一条领取 流水,入账为异步操作,这也解释了为啥在春节期间红包领取后在余额中看不到。拆的时候会实时计算金额,其金额为1分到剩余平均值2倍之间随机数,一个总金 额为M元的红包,最大的红包为 M * 2 /N(且不会超过M),当拆了红包后会更新剩余金额和个数。财付通按20万笔每秒入账准备,实际只到8万每秒。

FAQ

    1. 既然在抢的时候有原子减了就不应该出现抢到了拆开没有的情况?
      这里的原子减并不是真正意义上的原子操作,是Cache层提供的CAS,通过比较版本号不断尝试。

    2. cache和db挂了怎么办?
      主备 +对账

    3. 有没有红包个数没了,但余额还有情况?
      没有,程序最后会有一个take all操作以及一个异步对账保障。

    4. 为什么要分离抢和拆?
      总思路是设置多层过滤网,层层筛选,层层减少流量和压力。这个设计最初是因为抢操作是业务层,拆是入账操作,一个操作太重了,而且中断率高。 从接口层面看,第一个接口纯缓存操作,搞压能力强,一个简单查询Cache挡住了绝大部分用户,做了第一道筛选,所以大部分人会看到已经抢完了的提示。

    5. 抢到红包后再发红包或者提现,这里有什么策略吗?
      大额优先入账策略

    6. 有没有从数据上证明每个红包的概率是不是均等?
      不是绝对均等,就是一个简单的拍脑袋算法。

    7. 拍脑袋算法,会不会出现两个最佳?
      会出现金额一样的,但是手气最佳只有一个,先抢到的那个最佳。

    8. 发红包人的钱会不会冻结?
      是直接实时扣掉,不是冻结。

    9. 采用实时算出金额是出于什么考虑?
      实时效率更高,预算才效率低下。预算还要占额外存储。因为红包只占一条记录而且有效期就几天,所以不需要多大空间。就算压力大时,水平扩展机器是。


海量数据分析。
线程安全和非线程安全。
HTTP2.0、thrift。
java反射应用
分布式事务一致性。
nio的底层实现。
jvm基础是必问的,jvm GC原理,JVM怎么回收内存。
dubbo如何一条链接并发多个调用。Dubbo的原理,序列化相关问题。
用过哪些中间件。
做过工作流引擎没有。
以前的工作经历,自己觉得出彩的地方
线程池的一些原理,锁的机制升降级
从系统层面考虑,分布式从哪些纬度考虑
Hadoop底层怎么实现
threadLocal,线程池,hashMap/hashTable/coccurentHashMap等
秒杀系统的设计
虚拟机,IO相关知识点
Linux的命令
一个整形数组,给定一个数,在数组中找出两个数的和等于这个数,并打印出来,我写的时间复杂度高,要求O(n)。
n个整数,找出连续的m个数加和是最大。
更重视开源技术
数据库锁隐原理
1000个线程同时运行,怎么防止不卡
并列的并发消费问题)

线程越多,上下文切换所消耗的时间也就越多,因此不建议开大量线程,一种方法是用线程池,另一种方法是重新规划算法逻辑,用尽量少的线程处理。
高并发量大的话怎么处理热点,数据等
如何获取一个本地服务器上可用的端口
流量控制相关问题
数据库TPS是多少,是否进行测试过
缓存击穿有哪些方案解决
Java怎么挖取回收器相关原理
Java的集合都有哪些,都有什么特点
分布式锁,redis缓存,spring aop,系统架构图,MySQL的特性
场景,同时给10万个人发工资,怎么样设计并发方案,能确保在1分钟内全部发完 打个比方会提出类似的场景



posted @ 2018-05-30 18:14  阿善9  阅读(436)  评论(0编辑  收藏  举报