道孚好的java学习网站

  【强制】对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会 造成死锁。说明:线程一需要对表 A、B、C 依次全部加锁后才可以进行更新操作,那么线程二的加锁顺序也必须是 A、B、C,否则可能出现死锁。   02、Java CPU 100% 排查技巧   第一个姿势,步骤有点多,难度四星   平时多积累一点,这样在遇到问题的时候就少句求人的话。如果在实际的开发中遇到CPU 100%问题,要怎么排查呢?如果你没有遇到过这个问题,请先自己思考10s,如果你遇到过,这个时候也正好可以在回顾一遍。   一、 使用top命令查看cpu占用资源较高的PID

  四、多线程/并发   如何创建线程?如何保证线程安全?如何实现一个线程安全的数据结构如何避免死锁Volatile关键字的作用?HashMap在多线程环境下使用需要注意什么?为什么?Java程序中启动一个线程是用run()还是start()?什么是守护线程?有什么用?什么是死锁?如何避免线程和进程的差别是什么?Java里面的Threadlocal是怎样实现的?ConcurrentHashMap的实现原理是?sleep和wait区别notify和notifyAll区别volatile关键字的作ThreadLocal的作用与实现两个线程如何串行执行上下文切换是什么含义可以运行时kill掉一个线程吗?什么是条件锁、读写锁、自旋锁、可重入锁?线程池ThreadPoolExecutor的实现原理?   五、Linux使用与问题分析排查   使用两种命令创建一个文件?硬链接和软链接的区别?Linux常用命令有哪些?怎么看一个Java线程的资源耗用?Load过高的可能性有哪些?/etc/hosts文件什么做用?如何快速的将一个文本中所有“abc”替换为“xyz”?如何在log文件中搜索找出error的日志?发现磁盘空间不够,如何快速找出占用空间最大的文件?Java服务端问题排查(OOM,CPU高,Load高,类冲突)Java常用问题排查工具及用法(top, iostat, vmstat, sar, tcpdump, jvisualvm, jmap, jconsole)Thread dump文件如何分析(Runnable,锁,代码栈,操作系统线程ID关联)如何查看Java应用的线程信息?   六、框架使用

  在与初始化时机相关的类装载时机问题上,Java 虚拟机规范并没有对其做严格的定义,这就使得 JVM 在实现上可以根据自己的特点提供采用不同的装载策略。我们可以思考一下 Jboss AOP 框架的实现原理,它就是在对你的 class 文件装载环节做了手脚--插入了 AOP 的相关拦截字节码,这使得它可以对程序员做到完全透明化,哪怕你用 new 操作符创建出的对象实例也一样能被 AOP 框架拦截--与之相对应的 Spring AOP,你必须通过他的 BeanFactory 获得被 AOP 代理过的受管对象,当然 Jboss AOP 的缺点也很明显--他是和 JBOSS 服务器绑定很紧密的,你不能很轻松的移植到其它服务器上。嗯~……,说到这里有些跑题了,要知道 AOP 实现策略足可以写一本厚厚的书了,嘿嘿,就此打住。   说了这么多,类的初始化时机就是在"在首次主动使用时",那么,哪些情形下才符合首次主动使用的要求呢?   首次主动使用的情形:   创建某个类的新实例时--new、反射、克隆或反序列化;调用某个类的静态方法时;使用某个类或接口的静态字段或对该字段赋值时(final字段除外);调用Java的某些反射方法时初始化某个类的子类时在虚拟机启动时某个含有main()方法的那个启动类。   除了以上几种情形以外,所有其它使用JAVA类型的方式都是被动使用的,他们不会导致类的初始化。

  JAVA能拥有如今的霸主地位,有哪些原因呢?我们可以从JAVA的语言特别来分析。   ● 简单易学   JAVA是一个面向对象的编程语言。它吸收了C++的许多优点,摒弃了C++里难以理解的多继承、指针等概念,大大简化了程序设计,初学者学起来比较容易,常常是编程开发者的入门必选语言。   ● 跨平台   跨平台是JAVA最大的优势。

  Spark的Stage是怎么划分的?如何优化?   宽依赖与窄依赖区别   Spark性能调优   Flink、Storm与Spark Stream的区别(未)   说下spark中的transform和action

  (2)游戏难度的调整   玩家随着玩游戏的时间的增加,敌方飞机的数量会增加,出现的频率会有所提高,移动速度也会提高。   (3)游戏界面绘画功能   在右上角显示游戏时间(游戏难度于时间成正比,即游戏时间越长难度越高),玩家游戏得分,与我方飞机生命值,游戏主屏用来显示玩家对我方飞机(Hero airplane)的控制与敌方飞机(Enemy airplane)的出现及移动的显示。   (4)玩家游戏控制功能

  Hadoop:   MR的Shuffle过程   Yarn的工作机制,以及MR Job提交运行过程   MapReduce1的工作机制和过程   HDFS写入过程

  FairLock   源代码   static final class FairSync extends Sync { private static final long serialVersionUID=-3000897897090466540L; final void lock() { // final的lock()方法 // 获取锁 acquire(1); } protected final boolean tryAcquire(int acquires) { final Thread current=Thread.currentThread(); // 首先获取当前锁的状态 int c=getState(); // c=0 说明当前锁是avaiable的, 没有被任何线程占用, 可以尝试获取 // 因为是实现公平锁, 所以在抢占之前首先看看队列中有没有排在自己前面的Node // 如果没有人在排队, 则通过CAS方式获取锁, 就可以直接退出了 if (c==0) {//检测自己是不是head节点的后继节点,即处在阻塞队列第一位的节点 if (!hasQueuedPredecessors() &&// 当前线程还没有获得锁,所以可能存在多线程同时在竞争锁的情况, 所以这里使用CAS操作设置 state compareAndSetState(0, acquires)) {// 将当前线程设置为占用锁的线程 setExclusiveOwnerThread(current); return true; } } // 如果 c>0 说明锁已经被占用了 // 对于可重入锁, 这个时候检查占用锁的线程是不是就是当前线程,是的话,说明已经拿到了锁, 直接重入就行 else if (current==getExclusiveOwnerThread()) {// 重入锁, state 加1 (acquires) int nextc=c + acquires; if (nextc   throw new Error("Maximum lock count exceeded");// 调用setState方法时,是在当前线程已经是持有锁的情况下,因此对state的修改是安全的,只需要普通的方法就可以了。 setState(nextc); return true; } // 到这里说明有人占用了锁, 并且占用锁的不是当前线程, 则获取锁失败 return false; } }   获取锁的业务逻辑小结


  第二个问题:服务器CPU占用率高达到100%排查和解决?   第三个问题:有哪些工具能够快速查看线程使用情况?   本文对这三个问题进行总结整理,通过实例演示讲解,精彩干货,不容错过啊!   前戏就这么多,高潮会很多,做好了,让我们直奔主题,发动小船,Let's go!   01 Java死锁排查和解决


  我们需要把这个对象转换为我们自定义的注释(使用 instanceOf()检查之后),同时也可以调用自定义注释里面的方法。看看以下的实例代码,使用了上面的注解:   注解用例   注解的功能很强大,Spring和Hebernate这些框架在日志和有效性中大量使用了注解功能。注解可以应用在使用标记接口的地方。不同的是标记接口用来定义完整的类,但你可以为单个的方法定义注释,例如是否将一个方法暴露为服务。   在最新的servlet3.0中引入了很多新的注解,尤其是和servlet安全相关的注解。   HandlesTypes –该注解用来表示一组传递给ServletContainerInitializer的应用类。


  结果按百分制处理后,求出与100的差为最终成绩   当然本对比可能不是严谨科学,仅供参考。   附测试代码:   public static void testRandom(String method) {   RandomGenerator obj=new RandomGenerator();




好的java学习网站

下一篇:java学习心得2000字