java知识点(更新时间2018年7月13日14:14:40)

个人java学习笔记https://blog.csdn.net/qq_41517936/article/details/94627228

1.  异常(Throwable)

ERROR:表示系统级的错误和程序不必处理的异常,一般是很难恢复的严重问题,比如内存溢出

Exception:表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题程序运行正常从不会发生。(数组脚本越界ArrayIndexOutOfBoundsException、空指针异常NullPointerException、类转换异常ClassCastException)

2.  线程(Thread)

线程实现:(Thread()、Thread(new Runnable))

同步方法synchronized、wait()和notify,synchronized(对象)、public synchronized void xx(){},当一个线程进入一个对象的synchronized方法A后,其他线程只能进入此对象的普通方法,因为非静态的synchronized方法执行时要求获得对象锁,但此时对象锁已经被方法A取走。

sleep():线程暂停完后继续执行,不释放锁

wait()(必须在sychcronized内部调用)释放锁,让其他线程执行,只有当其他线程调用notify方法后,调用过wait()的线程重新进入到锁的竞争行列,调用notify()方法后并不立即释放锁,继续执行完代码

sleep()和wait()的区别线程notify()和notifyAll()的区别

同步阻塞式操作,对同一数据进行读写时,需要同步(注意静态static,不存在this.xx,只能是类.xx)

异步非阻塞式操作,当执行一个用时长的方法时,并不希望程序等待方法返回,采用异步

线程状态就绪运行synchronized阻塞wait和sleep挂起结束

start就绪 -- 线程调度系统将就绪状态的线程转为运行状态 -- 遇到synchrozied语句时转为阻塞 -- 当获得锁后转为运行状态 -- 调用wait方法转为挂起状态 -- 当代码执行完后为结束。

线程池事先创建若干个可执行的线程放入池(容器)中,需要的时候从池中取出不用自行创建,使用完毕后无需销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。创建对象时要获取他的内存资源或者其他资源,并且java虚拟机需要跟踪对象,以便对象销毁后进行垃圾回收,提高服务程序效率的一个手段就是减少创建和销毁的次数

3.  TCP/IP协议,HTTP协议

应用层(HTTP协议) - TCP层 - IP层 - 以太网层

HTTP协议 - Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。

TCP协议 - 保证数据通信的完整性和可靠性,防止丢包。(三次握手四次挥手

IP协议 可以连接多个局域网,定义了一套自己的地址规则,称为 IP 地址。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。

以太网协议最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信。

信息是通过数据包来传送的,将信息分为多个数据包来传送,每次传送都会确认,丢包就重发。

4.  Session,Cookie存储数据

Session数据存放在服务器端数据安全,当用户Session增多后会占用服务器性能,用户每次请求都会把SessionID放在HTTP请求头部,而SessionID是保存在客户端的Cookie中,所以当禁用Cookie时,Session也不能使用。

Cookie数据存放在客户端浏览器数据不安全,可对本地Cookie进行分析进行Cookie欺骗,单个Cookie在客户端限制是3K,就是说一个站点在浏览器端只能存放3K的Cookie。

最详细的Cookie和Session机制Cookie访问记录Session购物车

5.  Socket,ServerSocket,WebSocket

Socket客户端连接服务器,Socket对TCP/IP协议进行了封装,Socket本身不是协议,而是一个接口(API)。

ServerSocket:ServerSocket是等待用户连接,所以通常ServerSocket需要用到多线程来分别接收信息。一般Socket,ServerSocket是用在C/S架构上。

WebSocket:这是一个协议,类似HTTP协议,也是应用层协议,他与HTTP协议不同的是,WebSocket是双向通信协议,服务端可主动发送数据,一般用在B/S架构上。

Socket和ServerSocket的简单介绍及例子WebSocket介绍(与Socket的区别)

6.  分布式开发

7.  设计模式(单例,原型)

8.  GC垃圾回收

垃圾回收:处理内存问题,防止内存泄漏,当创建对象后,GC就开始监控这个对象的地址、大小及使用情况,通常,GC采用有向图的方式记录和管理堆中的所有对象,当对象不可达时,回收对象内存空间,手动调用System.gc()。

内存泄漏:一个不再被程序使用的对象或变量一直被占据在内存中。一般情况:长生命周期的对象持有短生命周期对象的引用,因为短生命周期的对象已经不需要了,但是长周期对象持有他的引用而导致不能被回收。短生命 short = new 长生命();

9.  面向对象三大特性

继承:从已有的父类或接口中派生而出新的子类或接口,子类可以直接使用父类的方法(public,protected),也可以对父类进行重写。

多态编译时多态(重载,相同方法名,不同参数及返回值);运行时多态(重写,继承父类,与父类的方法相同(返回值,参数都相同),在程序运行期间,根据指向对象的不同,决定使用的实现方法)

封装:将实体的属性和行为包装进一个类中,限制程序的读写(private,public)。对外只公开接口,这可以隐藏对象属性以及内部的具体实现。

抽象:通过特定实例抽取共同特性后形成概念的过程。可以没有abstract方法,不能实例化,abstract方法都必须是 abstract 返回值 方法名(String xx,Xxx xx);

10.  类型转换

基本类型之间的转换:+=会自动转换类型,而平时像 short s = 2; s = s + 1;编译报错,因为s+1时s会自动提升为int,再相加,得到的int值赋值给short会报错,二进制位数大的不能赋值给小的。如果要赋值,则必须强制转换即,s = (short)(s + 1);

基本类型和包装类型之间的转换

转换为String类型的方法:

Object.toString()(Object(Integer,Double...)不能为空,否则NullPointer异常)

强制转换(String)Object,这个Object真的只能是Object类

String.valueOf(Object)(Object可以为空,实现原理:obj == null ? "null" : obj.toString())

转换为基本类和包装类的方法:

转换为Object的基本类 - Object.parseXX(String s)

转换为包装类 -  构造器new Integer(String s)

转换为Object的包装类 - Object.valueOf(String s)   实现原理:new Integer(Integer.parseInt(s))。

11.  获取时间

时间格式化:SimpleDateFormate fmt = new SimpleDateFormate("yyyy年MM月dd日 HH时mm分ss秒"); fmt.formate(new Date());

Calendar类:获取时间:c.getTime();    输出就是  Tue Jun 12 23:22:59 CST 2018

他是个抽象类,用Calendar c = Calendar.getInstance();(使用单例模式来创建类的实例)来创建对象。获取对应的时间,年份等,使用c.get(Calendar.YEAR)c.get(Calendar.MONTH)+1月份需要+1,其他无需。

Date类:获取时间:Date d = new Date();   输出就是  Tue Jun 12 23:22:59 CST 2018

一系列get方法,getDate(),getHours()。。。,注意getYear()获得的时间是当前时间-1900,所以要获得当前年份要加上1900;getMonth()获取的月份是当前月份-1,所以获取当前月份需要+1

Date和Calendar的区别:Date好比时钟,能精确的表示特定的瞬间,时间;Calendar好比挂历,功能比Date多了很多,所以对日期的操作更加的方便

12.  IO流(Input/OutputStream、Reader/Writer对文件的读写)

编码问题UTF-8(中文占3个字节,英文占1个字节)、GBK(中文占2个字节,英文占1个字节),所以有时需要转换编码,为的就是防止乱码文本文件中存储的就是字节序列

常见IO流

字节流(FileFileInputStreamDataInputStreamBufferedInputStreamRandomAccessFile

字符流(InputStreamReader(new FileInputStream(),"gbk")、FileReaderBufferedReaderPrintWriter(有换行的输出方法pw.println(),因为BufferedReader的readLine()不识别换行,而且BufferedWriter只有write()方法,所以需要手动bw.newLine()))

序列化:对象需要实现Serializable接口(只是标识)。处理对象流的机制,可以对流化后的对象进行读写,也可以进行网络传输。序列化是为了解决对象流读写操作时可能引发的问题(如数据乱序)。

IO流 - 文件传输基础IO流面试题IO流使用规则

13.高并发

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值