Java学习笔记

1、对于方法内的变量,都必须初始化后才能使用(基本类型也需要),对应类的数据成员(即字段)是基本类型时,由于类在初始化时会给器默认初始化一个值,所以不用特别声明初始化也能在方法类直接使用。
2、类数据成员的初始化会在任何方法(包括构造器)被调用之前发生。数组元素中的基础类型会初始化成默认值
3、栈不会在多线程间共享,而堆会在多线程间共享
4、@Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,而 @Resource 默认按 byName自动注入罢了。
5、整洁的代码只做好一件事,
6、注意函数的命名准确性,只做符合函数命名的一件事
7、对象暴露行为,隐藏数据
8、字符流的实现与字节流基本相同,最大的区别是字节流是通过byte[]实现的,字符流是通过char[]实现的,inputStream,outputStream为字节流,read,write为字符流
9、hashmap的key可以为null,保存在table[0]位置,但存储多个null时,只保存最后一个null的value。heshtable的键key 和value 都不能为空。
10、序列化不保存静态变量,Transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。
11、查看oracle锁标SQL:select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID; 
12、查看所有已安装的rpm包:rpm -qa;
13、说wait()的作用是让“当前线程”等待,而“当前线程”是指正在cpu上运行的线程!
14、内置锁是可以重入的,一个线程试图获得一个由它自己持有的锁时,这个请求将会成功,简单说就是,一个线程在一个synchronized方法中可以调用该对象的另一个synchronized方法。
15、Lock 和 synchronized 有一点明显的区别 —— lock 必须在 finally 块中释放,而使用synchronized锁时JVM 将确保锁会获得自动释放
16、一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。
17、zookeeper工作过程:一个Zookeeper集群中有五台机器,在整个集群刚刚启动的时候,会进行Leader选举,当Leader确定之后,其他机器自动成为Follower,并和Leader建立长连接,用于数据同步和请求转发等。当有客户端机器的写请求落到follower机器上的时候,follower机器会把请求转发给Leader,由Leader处理该请求,比如数据的写操作,在请求处理完之后再把数据同步给所有的follower。
18、zookeeper的职责:ZooKeeper是分布式协调服务,它的 职责是保证数据(注:配置数据,状态数据)在其管辖下的所有服务之间保持同步、一致
19、Spring在初始化包含Transactional注解的类时,会自动生成这些类的代理,并放置在容器中,以便备用
20、Spring的AOP实现方式有两种:1、Java代理方式;2、Cglib动态增强方式,这两种方式在Spring中是可以无缝自由切换的
21、在相同线程中进行相互嵌套调用的事务方法工作于相同的事务中。如果这些相互嵌套调用的方法工作在不同的线程中,不同线程下的事务方法工作在独立的事务中。
22、父类事务调用两个子类事务时,若两子类事务都用默认的传播级别则其中一个事务抛异常另一个事务也会回滚(即使在父类中使用了try catch 也会回滚),若一个子事务使用了Propagation.REQUIRES_NEW,该事务抛异常回滚时,若父类使用了 try catch 则另一个子事务不会回滚,否则会回滚。
23、所有的泛型类实例都关联到同一份字节码上,泛型类的所有静态变量是共享的
24、zookeeper的watch事件是一次触发的,每次触发后要重新设置watch才能对该节点进行重新监听。且watch通知是异步通知
25、zookeeper提供的服务包括:命名服务,配置管理,集群管理,节点领导者选举,锁定和同步服务,高可靠的数据注册表
26、ZooKeeper不支持递归的删除操作,因此在删除父节点之前必须先删除子节点。
27、lock()、tryLock()、tryLock(long time, TimeUnit unit)和lockInterruptibly()是用来获取锁的。unLock()方法是用来释放锁的。其中:lock()方法是平常使用得最多的一个方法,就是用来获取锁。如果锁已被其他线程获取,则进行等待。tryLock()方法是有返回值的,它表示用来尝试获取锁,如果获取成功,则返回true,如果获取失败(即锁已被其他线程获取),则返回false,也就说这个方法无论如何都会立即返回。在拿不到锁时不会一直在那等待。tryLock(long time, TimeUnit unit)方法和tryLock()方法是类似的,只不过区别在于这个方法在拿不到锁时会等待一定的时间,在时间期限之内如果还拿不到锁,就返回false。如果如果一开始拿到锁或者在等待期间内拿到了锁,则返回true。返回false时不用调用unlock()释放锁。lockInterruptibly()方法比较特殊,当通过这个方法去获取锁时,如果线程正在等待获取锁,则这个线程能够响应中断,即中断线程的等待状态

28、java中的参数传递理解:Java中只有值传递: (1) 对于基本类型,直接拷贝值传递过去 (2)对于对象,拷贝当前对象的引用地址,然后把该地址传递过去,所以也是值传递.



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值