跳至内容
wiki
用户工具
登录
站点工具
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
登录
最近更改
媒体管理器
网站地图
您的足迹:
分享:技术:java:java知识点
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== java知识点 ====== <code> 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,拦掉 </code>
分享/技术/java/java知识点.txt
· 最后更改: 2018/03/21 17:49 由
gxx
页面工具
显示页面
修订记录
反向链接
回到顶部