用户工具

站点工具


分享:技术:java:java知识点

java知识点

1.spring的事务传播种类?
	*REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 
	*REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。 
	*NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
	SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。 
	MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。 
	NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。  
	NESTED -- 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 REQUIRED 类似的操作
2.i++是否线程安全?如果不是有什么办法让他变安全?
	不安全,synchonized(自动),lock(手动),concurrent下atomic子包,java.util.concurrent.atomic.AtomicInteger/AtomicLong/AtomicBoolean
3.线程池的原理?有哪些重要的参数?
	ThreadPool
	工作线程数 5
	排队队列-上限 100
	最大线程数 10
	最大超时时间 30秒
4.spring的aop实现原理?
	aop切面
	代理:jdk代理(有接口),cglib代理(继承)
	Proxy.newProxyInstance(object.getClassLoader(), new Class[] { object }, this);
5.两个线程去修改一个数,初始值是100,一个线程加十次,每次加10,一个线程减去十次,每次减10,不加任何锁,最终结果是多少?
	随机
6.并发包下面有哪些并发工具?
	1、常用的并发集合类
	*ConcurrentHashMap
	CopyOnWriteArrayList
	CopyOnWriteArraySet
	ArrayBlockingQueue
	LinkedBlockingQueue
	2、原子类
	*AtomicInteger
	3、锁
	ReentrantLock 可重入锁
	ReentrantReadWriteLock 可重入锁分读(共享锁)+写(独享锁)
7.dubbo和zookeeper的原理,组成模块?
	注册中心->zookeeper,发布与订阅功能
	消费者
	提供方
	监控中心
8.redis的原理?
	redis是单线程,不存在并发问题,没有线程切换开销,而且是内存操作,速度很快
9.jvm垃圾回收机制算法?
	引用计数法:Object a = new Object();缺点:解决不了循环依赖的问题!
	标记清除法:* (*) * (*) * * * *,清除掉!缺点:内存碎片化
	复制法:[****][****],内存分成2部分一样空间,将存活对象,拷贝到另一块,原始区域全部清除!缺点:只有一半空间使用
	标记整理法:结合了[标记清除法]+[复制],存活移动到另一侧连续性区域,再清除,好处:解决碎片化,空间利用高
	分代回收法:年轻代(Erden-8,Servior1-1,Servior2-1),老年代,永久代(类,静态,方法)->大部分jvm使用的算法
10.IO和NIO的区别?
	io:阻塞;一个请求,一个线程
	nio:none bloking io 非阻塞io;基于事件通知,一个线程,处理多个请求;节省线程开销
	netty:nio框架,传统nio写法复杂有bug,netty封装修复掉,dubbo底层可以使用netty/mina作为rpc通讯框架
11.装饰器模式原理,jdk哪里用到了?
	class Animal{say()}
	class Man extends Animal{say(){super();do();}}
	class Teacher extends Man{say(){super();do();}}
12.索引的结构?B tree的结构?
	二叉树,左边的永远小于右边的
13.深copy和浅copy区别
	浅拷贝:继承clone方法,User对象clone()方法,new User对象,把属性全部拷贝过去
	/**
	 * 浅拷贝
	 */
	@Override
	protected Object clone() throws CloneNotSupportedException {
		User user = new User();
		user.name = this.name;
		user.password = this.password;
		user.card = this.card;//Card是另外一个类
		return user;
	}
	深拷贝:不仅对象,而且所有属性也拷贝,实现方式:序列化/反序列化
14.hashcode和equals区别
	hashcode,方便查找,类似md5哈希散列算法,不同值可以对应同一个hash值
	equals,是表示两个对象相等
	hashcode相等,equals不一定相等;equals相等,hashcode一定相等
	用处:hashMap,set
15.怎么防止form表单重复提交
	jsp渲染form界面,form中放一个token(uuid)提交到后端,判断token是否来过
16.Thread.sleep()和object.wait()区别
	new -> 就绪状态 <-> 运行状态 -> 阻塞(synchronized/lock/sleep/wait)/完成
	sleep一定时间自动回到就绪状态
	wait阻塞,通过notify/notifyAll竞争到就绪状态
17.乐观锁和悲观锁区别
	乐观锁:version版本,可以并发,但是有可能报错
	悲观锁:for update,不允许并发,性能较低
18.TreeMap是怎么比较元素的
	HashMap无序,TreeMap有序
	红黑树算法,平衡二叉树,左旋,右旋,让左右的等级相差在1内
	比较:实现Comparable接口/穿进去一个comparable实现类
	@Override
	public int compareTo(User o) {
		if(null == o) {
			return 1;
		}
		return this.name.compareTo(o.name);
	}
19.ThreadLocal实现原理
	ThreadLocal里存放数据,每个线程,单独持有自己的那份,不会线程竞争
	/**
	 * 通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值
	 * 使得同一个线程的uuid是一样的
	 */
	public static ThreadLocal<String> uuid = new ThreadLocal<String>() {
		/**
		 * 初始值
		 */
		public String initialValue() {
			return "[uuid:" + UUID.randomUUID().toString() + "] : ";
		}
	};
	get();
	set();
20.redis的线程模型是什么
	单线程
21.rabbitmq能保证消息可靠性么?怎么保证?
	rabbitmq支持落地,重启还在;消费完返回标示,如果抛异常,会再次消费
22.dubbo的负载均衡策略
	轮询,随机,加权轮询,加权随机,最近最少使用
23. spring bean的生命周期
	new bean
	IOC注入
	BeanNameAware setName
	BeanFactoryAware setFactory
	BeanPostProcessor before
	InitializingBean afterPropertiesSet
	Spring配置文件 init-method
	BeanPostProcessor after
	DisposableBean destory
	Spring配置文件 destroy-method
24. spring是怎么实现@Transactional,TransactionStatus作用是什么?
	aop,之前开启事务,后面提交事务,回滚事务
	TransactionStatus看事务状态,当前是否有事务,事务传播属性,隔离级别
	web.xml中定义一个过滤器,spring代码也定义一个过滤器,先后顺序是什么?
	先web再spring
25. java对象头部有哪些字段,有什么用处?
	无锁   hashcode,分代年龄,锁标志
	轻量锁 锁指针  锁标志
	重量锁 锁指针  锁标志
	偏向锁 ...
26. 线程有哪些状态,之间怎么流转的?
	状态参考上面问题
	一个线程去竞争锁的时候,发现无法获取锁,线程处于什么状态:阻塞
27. 画一下观察者模式的类图并用代码实现
	观察者 也叫 发布与订阅
	class Student {say()}
	class Teacher {
		List<Student>
		addSdudent(){}
		say() {
			for(List<Student>){
				student.say()
			}
		}
	}
28. dubbo的线程模型是什么?
	关注线程创建派发,线程池大小
	dispacher:all 所有派发线程池/direct 不派发,在io中执行/... 
	threadpool:fixed 固定大小/cached 超过1分钟回收线程/limited 一直往上涨,不回收
29.线程之间怎么通讯的?
	synchronized/lock
	wait/notify
	volatile 线程中可见性,每次读写都指向主寸

	无volatile
	[threadA]               [threadB]
	get <- 主寸[1]		    get <- 主寸[1]
	set 2                   get [1]
	set 3                   get [1]
	set 4 (结束) -> 主寸[4]  get [4]

	有volatile
	[threadA]               [threadB]
	get <- 主寸[1]		    get <- 主寸[1]
	set 2 -> 主寸[2]         get <- 主寸[2]
	set 3 -> 主寸[3]         get <- 主寸[3]
	set 4 (结束) -> 主寸[4]  get <- 主寸[4]

30.java8中,stream哪些操作是有状态的,哪些是无状态的,怎么实现并行流的?
	??
31.zookeeper分布式锁的加锁的详细流程?
	非分布式锁:在一个jvm内的锁,synchronized,lock
	分布式锁:使用redis/zookeeper实现跨应用节点的锁(be1/be2锁住同一笔流水)
	操作:new RedisLock(key); redisLock.lock(); ->锁住<- redisLock.unlock();
	redis实现:setNx(流水key,当前时间+60s);get(判超时);getset(判是否被当前线程写了);del()
	zookeeper实现:1.写有序节点:/流水key/有序节点->1/2/3/4/5,2.get节点list,判断当前是否最小,则拿到锁 3.监听watcher比他小的那个值比如[5]监听[4]的消除 4.消除节点
32.说说spring中有哪些设计模式?
	单例 bean默认是singoleton
	代理模式 aop
	...
34.多线程你用过哪些东西?
	synchronized/lock
	wait/notify/notifyAll
	线程池 Excutors.newFixedThreadPool
	concurrentHashMap ...
	AtomicInteger	
36.如果防止用户不停的操作贯穿缓存,直接查询数据库?在代码中怎么实现?
	贯穿缓存:一直查询,缓存中不存在的key,直接查数据库
	实现:[bank_007:cache][bank_008_not_exist:true],监听insert008场景,删除[bank_008_not_exist]
37.jvm怎么调优
	不知道
38.redis分布式锁,怎么实现
	见31
39.concurrent并发包下面有哪些类
	并发Map,list,set,queue/atomic原子包/lock
41.zookeeper做配置中心,说明原理
	目录结构,发布与订阅机制
42.zookeeper怎么保证一致性
	paxos算法:部署奇数台,3,5,7台,一起投票,保证一致性
44.spring ioc单例模式,singolton,实现原理
	singleton:只有一个实例,单例
	prototype:每次请求,新实例
	singleton的实现:注册表,Map
	Map singletonCache=new HashMap();
	singletonCache.put("beanName", new instanse());
	singletonCache.get("beanName");
45.synchronize修饰static方法锁对象还是锁类,java内存里,怎么标记锁的?
	synchronize修饰非static方法,或者方法局部代码->锁对象
	synchronize修饰static方法->锁类
	java内存里,怎么标记锁的:java对象头,有标记锁
47.组合模式是啥
	class A { a() }
	class B { b() }
	class C { 
		A a;
		B b;
		c() {
			a();
			b();
			...
		}
	}
48.一个MAP,怎么按照key排序,怎么按照value排序
	HashMap无序
	按key排序:new TreeMap(hashMap)有序
	按value排序:
	Map -> List<entry<key,value>> -> Collections.sort(List, new Comparable<entry<key,value>>(){比较value}) -> LinkedHashMap
49.多线程并发修改数据库的一条记录,怎么保证数据安全
	乐观锁
	悲观锁
50.用户反馈系统慢,怎么排查
	定位哪个系统慢:调用链系统比如pinpoint,定位哪个方法慢,往底层方法或者对应系统查找原因
51.某个子系统就是慢,怎么优化
	多使用缓存cache,少查数据库
	改异步消息消费,实时返回处理中
	数据库加索引
	读写分离
	分库分表
	CDN
	静态文件压缩,js,css等
	图片服务器分离
	多部署节点,负载均衡
	流量控制
52.怎么设计一个秒杀系统,redis一秒10万并发,怎么设计让系统扛住50万并发
	秒杀:分布式锁
	     redis原子性操作
	     异步排队
	50万并发:部署redis集群,实在扛不住,流控,或者异步消费
53.两个系统数据不一致,怎么排查问题
	同步服务日志排查,检查原因
54.怎么做一个报表系统,实时查询符合某些特征的用户交易,涉及大数据jstorm啥的
	不知道!
55.linux awk命令,ps -ef,看虚拟机内存命令(输出中有3个参数)
	awk 自己查
	ps 查进程
	top free 自己查
56.怎么实现一个流控功能
	方式1:漏桶算法(+)
	注解aop,方法进来+1,出去-1,如果值到达阀值,拦掉

	方式2:令牌算法(-)
	定时1分钟跑批,重置令牌数为100个令牌
	注解aop,方法进来-1,如果减为0,拦掉
分享/技术/java/java知识点.txt · 最后更改: 2018/03/21 17:49 由 gxx