暂无个人介绍
周志明的这本书不错,https://book.douban.com/subject/6522893/
可以参照书中的章节,动手操作一下
thread实现了runnable接口,做了功能上的增强,线程名、优先级、分组等;
Java是单继承的,只能有一个parent;implements 接口是没有这个限制的
hashCode()方法用于hashmap hashset等集合类寻址时使用,hashCode相同,equals不一定相等;equals相等则hashcode需相等
遍历数组,已遍历的放到map中,对象做key,value是出现次数;
多重循环+一个hashset去重即可
==指两者相等,即内存地址相同;
equals指两者逻辑上相等,根据equals方法去判定
Comparator是指排序器,输入需要排序的对象列表,返回有序的列表;
Comparable指实现该接口的类实例,支持比较;比较时是当前实例与入参比较
可以使用guava的Joiner,com.google.common.base.Joiner
底层实现不同,顾名思义,arraylist底层实现是数组;linkedlist底层是链表
Externalizable适用与需要自定义序列/反序列化方法的场景
高并发,要有具体的场景,才会有具体的解决方案;
如果是初学者可以学习下doug lee 的curcurrent实现,了解下具体的思想;
如果是有具体的场景,可以了解下cache mq 等等相应的解决方案
throws 用于声明,throw是执行具体的动作
Java好在有良好的生态,工具、社区以及成功的案例,以及大量的从业者;
缺点也比较明显,低效和臃肿的语法
有多种可能,需要你看下具体异常情况:
1.jstack命令没找到
2.没有足够权限执行
3.jstack语法错误
你要学会自己定位问题和学会提问
不同的人学习方法不同,从我个人角度出发,建议先Spring,从其基础学起,了解每个模块是解决什么问题,
再去学些高级特性,怎么写起来更有效率
本质就是CAS,先比较再设值,CAS本身是原子的,所以可以保证线程安全
就跟公司部分的划分一样,怎么做到高效运作,就是要边界清楚,能解决的事情在内部完成,减少不必要的跨部门协助;
设计上的话,要做好抽象,适合当前及可预期的业务发展;
编码上就简单一点,明确类的左右,明确方法的输入输出,职责清晰。
先看表象,输入参数中有一个基本类型的参数,一个封装类型的对象,在方法体中修改了以上2个参数;
1.方法退出后这2个参数,在主方法中值会变化吗?
2.思考下这2个参数在内存当中存在什么那块区域上
考虑清楚以上2个问题,你就明白了
这个问题不是异常处理应该怎么处理的问题,而是针对不同的场景应该怎么处理,我理解的做到以下两点就可以了:
1.对外提供的服务,不要制造"惊喜"
2.内部使用的服务,要易于定位问题
根据使用场景想一下使用你接口的人怎么使用以及出现问题的时候,你要怎么定位问题;就可以知道这个问题怎么解决了
对一般人而言是底层基础重要;主要是掌握解决问题对方法以及实现的机理;
知道一个工具能做什么,局限是什么,后面就可以融会贯通;
项目经验也是解决问题的经验,不能简单重复,要求和思考深度也要逐步提高