Java 200道题

Java 200道题


1. junit用法,before,beforeClass,after, afterClass的执行顺序

一个测试类单元测试的执行顺序为:

@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

每一个测试方法的调用顺序为:

@Before –> @Test –> @After

参考: http://blog.csdn.net/wangpeng047/article/details/9631193


2. 分布式锁

一、zookeeper 瞬时有序节点:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,生成一个唯一的瞬时有序节点

二、memcached add函数:add会添加第一个到达的值,并返回true,后续的添加则都会返回false。(无法持久化)

三、redis分布式锁

redis分布式锁即可以结合zk分布式锁锁高度安全memcached并发场景下效率很好的优点,可以利用jedis客户端实现。

参考http://blog.csdn.net/java2000_wl/article/details/8740911

http://surlymo.iteye.com/blog/2082684


3. nginx的请求转发算法,如何配置根据权重转发

当在一台主机上部署了多个不同的web服务器,并且需要能在80端口同时访问这些web服务器时,可以使用 nginx 的反向代理功能: 用 nginx 在80端口监听所有请求,并依据转发规则(比较常见的是以 URI 来转发)转发到对应的web服务器上。

例如有 webmail , webcom 以及 webdefault 三个服务器分别运行在 portmail , portcom , portdefault 端口,要实现从80端口同时访问这三个web服务器,则可以在80端口运行 nginx, 然后将 /mail 下的请求转发到 webmail 服务器, 将 /com下的请求转发到 webcom 服务器, 将其他所有请求转发到 webdefault 服务器。

http://blog.csdn.net/tobacco5648/article/details/51099426


4. 用hashmap实现redis有什么问题

(死锁,死循环,可用ConcurrentHashmap)


5. 线程的状态

五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。


5. 线程的阻塞的方式

sleep() wait() join()


6. sleep和wait的区别

对于sleep()方法,是属于Thread类中的。而wait()方法,则是属于Object类中的。

sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,线程不会释放对象锁。

而当调用wait()方法的时候,线程会放弃对象锁,对象调用notify()方法后本线程才获取对象锁进入运行状态。


7. hashmap的底层实现

HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的)。

HashMap底层就是一个数组,数组中的每一项又是一个链表。当程序试图将一个key-value对放入HashMap中时,程序首先根据该 key 的 hashCode() 返回值决定该 Entry 的存储位置:如果两个 Entry 的 key 的 hashCode() 返回值相同,那它们的存储位置相同。如果这两个 Entry 的key 通过 equals 比较返回 true,新添加 Entry 的 value 将覆盖集合中原有 Entry 的 value,但key不会覆盖。如果这两个 Entry 的 key 通过 equals 比较返回 false,新添加的 Entry 将与集合中原有 Entry 形成 Entry 链

http://www.cnblogs.com/ITtangtang/p/3948406.html


8. 一万个人抢100个红包,如何实现(不用队列),如何保证2个人不能抢到同一个红包?

可用jedisLock—redis分布式锁实现:基本原理用一个状态值表示锁,对锁的占用和释放通过状态值来标识。

SETNX key value/expire KEY seconds/del KEY

http://blog.csdn.net/u010359884/article/details/50310387

http://www.cnblogs.com/0201zcr/p/5942748.html


9. java内存模型,

垃圾回收机制,不可达算法


10. 两个Integer的引用对象传给一个swap方法在方法内部交换引用,返回后,两个引用的值是否会发现变化

不会!Java里方法的参数传递方式只有一种:值传递。

Integer a =1;Integer b=2; swap(Integer a1,Integer b1){c=b1;b1=a1;a1=c}


11. aop的底层实现,动态代理是如何动态,假如有100个对象,如何动态的为这100个对象代理

AOP的核心机制通过动态代理来实现(jdk动态代理和cglib动态代理)


12. 是否用过maven install。 maven test。Git(make install是安装本地jar包)

maven install 生成jar包

maven test 运行 src/test/java下的测试用例

mvn install -Dmaven.test.skip=true跳过测试

http://www.cnblogs.com/phoebus0501/archive/2011/05/10/2042511.html


13. tomcat的各种配置,如何配置docBase

appBase这个目录下面的子目录将自动被部署为应用

docBase只是指向了你某个应用的目录

http://blog.csdn.net/liuxuejin/article/details/9104055


14. spring的bean配置的几种方式

基于XML的配置、基于注解的配置和基于Java类的配置。

http://www.cnblogs.com/zhangwenjing/p/3546006.html


15. web.xml的配置

最终加载顺序:ServletContext -> listener -> filter -> servlet

http://www.cnblogs.com/xxoome/p/5954633.html


16. spring的监听器。

http://blog.csdn.net/xrt95050/article/details/6132179


17. zookeeper的实现机制,有缓存,如何存储注册服务的

ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务

http://blog.csdn.net/xinguan1267/article/details/38422149


18. IO会阻塞吗?readLine是不是阻塞的

readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null

readLine()只有在数据流发生异常或者另一端被close()掉时,才会返回null值。

http://blog.csdn.net/swingline/article/details/5357581


19. 用过spring的线程池还是java的线程池?

SpringFrameWork 的 ThreadPoolTaskExecutor 是辅助 JDK 的 ThreadPoolExecutor 的工具类,它将属性通过 JavaBeans 的命名规则提供出来,方便进行配置。

http://www.cnblogs.com/chkk/p/5386356.html


20. 字符串的格式化方法 (20,21这两个问题问的太低级了)

String类的format()方法

21. 时间的格式化方法

SimpleDateFormat的format()方法
22. 定时器用什么做的

http://lengchaotian.iteye.com/blog/1887439


23. 线程如何退出结束

1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 while (!exit);
2. 使用stop方法强行终止线程。
3. 使用interrupt方法中断线程。


24. java有哪些锁?

乐观锁 悲观锁 synchronized 可重入锁 读写锁,

用过reentrantlock吗?reentrantlock与synmchronized的区别

1. 等待可中断 tryLock(long timeout, TimeUnit unit)。

2.公平锁与非公平锁(synchronized的是非公平锁

3.绑定多个Condition

http://www.cnblogs.com/fanguangdexiaoyuer/p/5313653.html


25. ThreadLocal的使用场景

ThreadLocal就是用于线程间的数据隔离的。最适合的是按线程多实例(每个线程对应一个实例)的对象的访问


26. java的内存模型,垃圾回收机制


27. 为什么线程执行要调用start而不是直接run

(直接run,跟普通方法没什么区别,先调start,run才会作为一个线程方法运行)


28. qmq消息的实现机制(qmq是去哪儿网自己封装的消息队列)
29. 遍历hashmap的三种方式

方式1:通过遍历keySet()遍历HashMap的value
用时:61
方式2:通过遍历values()遍历HashMap的value
用时:7
方式3:通过entrySet().iterator()遍历HashMap的key和映射的value
用时:12

http://blog.csdn.net/fly_zxy/article/details/43015193

 

30. jvm的一些命令

jps jstat jmap jhat jstack jinfo

 

31. memcache和redis的区别

1  Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
2  Redis支持数据的备份,即master-slave模式的数据备份。
3  Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

http://blog.csdn.net/tonysz126/article/details/8280696/

32. MySQL的行级锁加在哪个位置

表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写操作。如果你是写锁,则其它进程则读也不允许
行级,,仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。
页级,表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。

http://www.jb51.net/article/50047.htm


33. ConcurrentHashmap的锁是如何加的?是不是分段越多越好

http://www.cnblogs.com/my376908915/p/6759667.html


34. myisam和innodb的区别

(innodb是行级锁,myisam是表级锁)


35. mysql其他的性能优化方式

http://www.cnblogs.com/eric-gao/articles/5549801.html

 

36. linux系统日志在哪里看

/var/log/*     ,用Ls / cat查看

http://mushme.iteye.com/blog/1001478

 

37. 如何查看网络进程

38. 统计一个整数的二进制表示中bit为1的个数

while (n >0)
    {
        if((n &1) ==1) // 当前位是1 ++c ; // 计数器加1 n >>=1 ; // 移位  }

http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html

 

39. jvm内存模型,java内存模型

http://www.cnblogs.com/my376908915/p/6753498.html

 

40. 如何把java内存的数据全部dump出来

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值