Java 个人知识点总结(基础篇)(1)
5. ?Ajax 是基于标准化并被广泛支持的技术,并且不需要插件和下载小程序
JSP9 大隐视对象中四个作用域的大小与作用范围
四个作用域从大到小:appliaction>session>request>page
application:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。
session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记??????????????住这个会话状态。
request:请求作用域,就是客户端的一次请求。
page:一个 JSP 页面。
以上作用范围使越来越小,request 和 page 的生命周期都是短暂的,他们之间的区别就是:一个 request 可以包含多个 page 页(include,forward)。
List,Set,Collection,Collections √
[if !supportLists]1.[endif]List 和 Set 都是接口,他们都继承于接口 Collection,List 是一个有序的可重复的集合,而 Set 的无序的不可重复的集合。Collection 是集合的顶层接口,Collections 是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私有的,所以不能实例化。
2.List 接口实现类有 ArrayList,LinkedList,Vector。ArrayList 和 Vector 是基于数组实现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢 LinkedList 是基于链式存储结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候速度较快。又因为 Vector 是线程安全的,所以他和 ArrayList 相比而言,查询效率要低。
List 和 set 都属于接口 ??他们都继承于 collection ?
List 是一个有序的 ??可重复的 ??set 是无序得到不可重复的
Collection 是集合的顶层接口 ?, collections 是封装可众多集合的操作的静态的工具类 ?因为他是私有化的所以他不可以实例化
List 的接口实现类分为 arraylist vertor linkedlist arraylist 和 verson 是基于数组实现的,说以查询的时候较快 ?,但是增加 与删除 的速度较慢。 ?Linkelist 是基于链式存储 ,所以查询的时候较慢, 增加与删除数独较快, 又因为 vertor 线程安全 ?所以 arraylist 相比 效率
如果你依然觉得有些茫然,不如加入我的 Java 架构师之路:766529531 跟有多年 Java 开发经验的资深工程师聊一聊。也可获取免费的视频学习资料以及电子书学习资料喔!
java 的基本数据类型
数据类型 大小
byte(字节) 1(8 位)
shot(短整型) 2(16 位)
int(整型) 4(32 位)
long(长整型) 8(32 位)
float(浮点型) 4(32 位)
double(双精度) 8(64 位)
char(字符型) 2(16 位)
boolean(布尔型) 1 位
附加:
String 是基本数据类型吗?(String 不是基本数据类型)
String 的长度是多少,有限制?(长度受内存大小的影响)
冒泡排序
public class Sort {
public static void sort() {
Scanner input = new Scanner(System.in);
int sort[] = new int[10];
int temp;
System.out.println("请输入 10 个排序的数据:");
for (int i = 0; i < sort.length; i++) {
sort[i] = input.nextInt();
}
for (int i = 0; i < sort.length - 1; i++) {
for (int j = 0; j < sort.length - i - 1; j++) {
if (sort[j] < sort[j + 1]) {
temp = sort[j];
sort[j] = sort[j + 1];
sort[j + 1] = temp;
}
}
}
System.out.println("排列后的顺序为:");
for(int i=0;i<sort.length;i++){
System.out.print(sort[i]+" ??");
}
}
public static void main(String[] args) {
sort();
}
}
二分查找法
**十八、**时间类型转换
public class DateFormat {
public static void fun() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日");
String newDate;
try {
newDate = sdf.format(new SimpleDateFormat("yyyyMMdd")
.parse("20121115"));
System.out.println(newDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
fun();
}
}
阶乘
public class Multiply {
public static int multiply(int num) {
if (num < 0) {
System.out.println("请输入大于 0 的数!");
return -1;
} else if (num == 0 || num == 1) {
return 1;
} else {
return multiply(num - 1) * num;
}
}
public static void main(String[] args) {
System.out.println(multiply(10));
}
}
UE 和 UI 的区别
UE 是用户体验度
UI 界面原型(用户界面)(相当于买房时用的模型)
设计 UI 的作用:
1、帮助程序员工作(界面已由美工设计完成)
2、提前让用户对项目有个宏观的了解,知道效果是什么样子。
osi 七层模型
第一层:物理层
第二层:数据链路层
第三层:网络层
第四层:传输层
第五层:会话层
第六层:表示层
第七层:应用层
线程和进程的区别
1.线程(Thread)与进程(Process)
进程定义的是应用程序与应用程序之间的边界,通常来说一个进程就代表一个与之对应的应用程序。不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间。
如果你依然觉得有些茫然,不如加入我的 Java 架构师之路:766529531?跟有多年 Java 开发经验的资深工程师聊一聊。也可获取免费的视频学习资料以及电子书学习资料喔!
1、一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。
2、实现线程的两种方式:继承 Thread 类,实现 Runable 接口
jvm 的内存结构
1、java 虚拟机的内存结构分为堆(heap)和栈(stack),堆里面存放是对象实例也就是 new 出来的对象。栈里面存放的是基本数据类型以及引用数据类型的地址。
2、对于所谓的常量是存储在方法区的常量池里面。
内存泄露和内存溢出
内存泄露(memory leak),是指应用程序在申请内存后,
无法释放已经申请的内存空间.一次内存泄露危害可以忽略,
但如果任其发展最终会导致内存溢出(out of memory).
如读取文件后流要进行及时的关闭以及对数据库连接的释放。
内存溢出(out of memory)是指应用程序在申请内存时,
没有足够的内存空间供其使用。
如我们在项目中对于大批量数据的导入,采用分段批量提交的方式。
单例
单例就是该类只能返回一个实例。
单例所具备的特点:
1.私有化的构造函数
2.私有的静态的全局变量
3.公有的静态的方法
单例分为懒汉式、饿汉式和双层锁式
饿汉式:
public class Singleton1 {
??????private Singleton1() {};
??????private static Singleton1 single = new Singleton1();
??????public static Singleton1 getInstance() {
??????????return single;
?????}
?}
懒汉式:
public class Singleton2 {
??????private Singleton2() {}
??????private static Singleton2 single=null;
??????public tatic Singleton2 getInstance() {
???????????if (single == null) { ?
??????????????single = new Singleton2();
??????????} ?
?????????return single;
?????}
?}
线程安全:
public class Singleton3 {
??private Singleton3() {}
??private static Singleton3 single ;
??public static Singleton3 getInstance() {
if(null == single){
synchronized(single ){
if(null == single){
single = new Singleton3();
}
}
}
return single;
??}
}
参考:
通过双重判断来保证单列设计模式在多线程中的安全性,
并且它在性能方面提高了很多。
synchronized 在方法上加锁 (同步锁)
synchronized 在代码块内部加锁 (同步代码块)
synchronized(同步锁)
使用 synchronized 如何解决线程安全的问题?
1.synchronized 在方法上加锁
2.synchronized 在代码块内部加锁
1.懒汉 ?2.饿汉 3.双重判断
解析 xml 文件的几种技术
1、 解析 xml 的几种技术
1.dom4j
2.sax
3.jaxb
4.jdom
5.dom
1.dom4j ???????
dom4j 是一个 Java 的 XML API,类似于 jdom,用来读写 XML 文件的。dom4j 是一个非常优秀的 Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
2.sax
SAX(simple API for XML)是一种 XML 解析的替代方法。相比于 DOM,SAX 是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于 DOM,SAX 可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于 SAX 来说就是操作复杂。
3.jaxb
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据 XML Schema 产生 Java 类的技术。该过程中,JAXB 也提供了将 XML 实例文档反向生成 Java 对象树的方法,并能将 Java 对象树的内容重新写到 XML 实例文档。从另一方面来讲,JAXB 提供了快速而简便的方法将 XML 模式绑定到 Java 表示,从而使得 Java 开发者在 Java 应用程序中能方便地结合 XML 数据和处理函数。
2、dom4j 与 sax 之间的对比:【注:必须掌握!】
dom4j 不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,
sax 是基于事件来对 xml 进行解析的,所以他可以解析大文件的 xml
也正是因为如此,所以 dom4j 可以对 xml 进行灵活的增删改查和导航,而 sax 没有这么强的灵活性
所以 sax 经常是用来解析大型 xml 文件,而要对 xml 文件进行一些灵活(crud)操作就用 dom4j
如果你依然觉得有些茫然,不如加入我的 Java 架构师之路:766529531?跟有多年 Java 开发经验的资深工程师聊一聊。也可获取免费的视频学习资料以及电子书学习资料喔!
项目的生命周期
1.需求分析
2.概要设计
3.详细设计(用例图,流程图,类图)
4.数据库设计(powerdesigner)
5.代码开发(编写)
6.单元测试(junit 白盒测试)(开发人员)
svn 版本管理工具(提交,更新代码,文档)
7.集成测试 (黑盒测试,loadrunner(编写测试脚本)(高级测试))
8.上线试运行 (用户自己体验)
9.压力测试(loadrunner)
10.正式上线
11.维护
OSCache 的判断
Object obj = CacheManager.getInstance().getObj("oaBrandList");
//从缓存中取数据
if (null == obj) ?{
obj = brandDao.getBrandList();
//如果为空再从数据库获取数据
//获取之后放入缓存中
CacheManager.getInstance().putObj("oaBrandList", obj);
}
return (List<OaBrand>)obj;
经常访问的技术网站
1.csdn(详细步骤的描述)
2.iteye(详细步骤的描述)
3.oschina(开源中国获取 java 开源方面的信息技术)
4.java 开源大全 www.open-open.com(获取 java 开源方面的信息技术)
5.infoq(对 java,php,.net 等这些语言的一些最新消息的报道)
项目团队中交流的工具
飞秋(局域网) qq(局域网,外网)
RTX(局域网,外网) 邮箱(局域网,外网)
平时浏览的书籍
实战经验:
*** in action(实战)
***深入浅出
***入门指南
思想基础:
大话设计模式 重构
java Exception 体系结构
java 异常是程序运行过程中出现的错误。Java 把异常当作对象来处理,并定义一个基类 java.lang.Throwable 作为所有异常的超类。在 Java API 中定义了许多异常类,分为两大类,错误 Error 和异常 Exception。其中异常类 Exception 又分为运行时异常(RuntimeException)和非运行时异常(非 runtimeException),也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。
1、Error 与 Exception
Error 是程序无法处理的错误,比如 OutOfMemoryError、ThreadDeath 等。
这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。
Exception 是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。
2、运行时异常和非运行时异常 ?????
运行时异常:都是 RuntimeException 类及其子类异常: ??? IndexOutOfBoundsException 索引越界异常
ArithmeticException:数学计算异常
NullPointerException:空指针异常
ArrayOutOfBoundsException:数组索引越界异常
ClassNotFoundException:类文件未找到异常
ClassCastException:造型异常(类型转换异常)
这些异常是不检查异常(Unchecked Exception),程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的。
非运行时异常:是 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如:
IOException、文件读写异常
FileNotFoundException:文件未找到异常
EOFException:读写文件尾异常
MalformedURLException:URL 格式错误异常
SocketException:Socket 异常
SQLException:SQL 数据库异常
session 和 cookie 的区别
session 是存储在服务器端,cookie 是存储在客户端的,所以安全来讲 session 的安全性要比 cookie 高,然后我们获取 session 里的信息是通过存放在会话 cookie 里的 sessionid 获取的。又由于 session 是存放在服务器的内存中,所以 session 里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在 session 中,而把一些次要东西存储在客户端的 cookie 里,然后 cookie 确切的说分为两大类分为会话 cookie 和持久化 cookie,会话 cookie 确切的说是存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话 cookie 也就消失了,然而持久化 cookie 是存放在客户端硬盘中,而持久化 cookie 的生命周期就是我们在设置 cookie 时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时 session 会不会丢失,从上面叙述分析 session 的信息是通过 sessionid 获取的,而 sessionid 是存放在会话 cookie 当中的,当浏览器关闭的时候会话 cookie 消失所以我们的 sessionid 也就消失了,但是 session 的信息还存在服务器端,这时我们只是查不到所谓的 session 但它并不是不存在。那么,session 在什么情况下丢失,就是在服务器关闭的时候,或者是 sessio 过期,再或者调用了 invalidate()的或者是我们想要 session 中的某一条数据消失调用 session.removeAttribute()方法,然后 session 在什么时候被创建呢,确切的说是通过调用 session.getsession 来创建,这就是 session 与 cookie 的区别
字节流与字符流的区别
stream 结尾都是字节流,reader 和 writer 结尾都是字符流
两者的区别就是读写的时候一个是按字节读写,一个是按字符。
实际使用通常差不多。
在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。
只是读写文件,和文件内容无关的,一般选择字节流。
final,finally,finalize 三者区别
Final 是一个修饰符:
当 final 修饰一个变量的时候,变量变成一个常量,它不能被二次赋值
当 final 修饰的变量为静态变量(即由 static 修饰)时,必须在声明这个变 量的时候给它赋值
当 final 修饰方法时,该方法不能被重写
当 final 修饰类时,该类不能被继承
Final 不能修饰抽象类,因为抽象类中会有需要子类实现的抽象方法,(抽 象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方 法时,这个抽象类也就没有了它存在的必要)
Final 不能修饰接口,因为接口中有需要其实现类来实现的方法
Finally:
Finally 只能与 try/catch 语句结合使用,finally 语句块中的语句一定会执行,并且会在 return,continue,break 关键字之前执行
finalize:
Finalize 是一个方法,属于 java.lang.Object 类,finalize()方法是 GC(garbage collector 垃圾回收)运行机制的一部分,finalize()方法是在 GC 清理它所从属的对象时被调用的
Io 流的层次结构
从流的方向
输入流 输出流
从流的类型上
字符流字节流
inputstream 和 outputstream 都是抽象类
它们下面的实现包括
FileInputStream,BufferedInputStream
FileOutputStream,BufferedOutputStream
reader 和 writer
FileReader,BufferedReader,StringReader
FileWriter,BufferedWriter,StringWriter
,PrintWriter
JAVA:
Java 是面向对象的,跨平台的,它通过 java 虚拟机来进行跨平台操作,它可以进行自动垃圾回收的【c 语言是通过人工进行垃圾回收】,java 还会进行自动分配内存。【c 语言是通过指定进行分配内存的】,只需要 new 一个对象,这个对象占用了多少空间,不需要我们来管,java 虚拟机负责管这些,用完之后也不需要我们来释放,java 虚拟机会自动释放
JavaSE JavaEE JavaME 区别
是什么:
Java SE=Java Standard Edition=j2se = java 标准版
Java EE=Java Enterprise Edition=j2ee= java 企业版
Java ME=Java Mobile Edition=j2me = java 移动版
特点:
SE 主要用于桌面程序(swing),控制台开发(main 程序)。
EE 企业级开发(JSP,EJB,Spring MVC,Struts,hibernate,ibatis 等),
用于企业级软件开发,网络开发,web 开发。
ME 嵌入式开发(手机,小家电,PDA)。[苹果的 ios,黑莓]
三者之间的关系:
Java SE(Java Platform, Standard Edition,Java 标准版)就是基于 JDK 和 JRE 的。
Java SE 为 Java EE 提供了基础。
Java EE 除了基于我们这个所谓的 Java SE 外,还新加了企业应用所需的类库
JDK ?JRE ?JVM 的区别:
Jdk【Java Development ToolKit】就是 java 开发工具箱, JDK 是整个 JAVA 的核心里边包含了 jre,它除了包含 jre 之外还包含了一些 javac 的工具类,把 java 源文件编译成 class 文件,java 文件是用来运行这个程序的,除此之外,里边还包含了 java 源生的 API,java.lang.integer 在 rt 的 jar 包里边【可以在项目中看到】,通过 rt 这个 jar 包来调用我们的这些 io 流写入写出等
JDK 有以下三种版本:
J2SE,standard edition,标准版,是我们通常用的一个版本
J2EE,enterpsise edtion,企业版,使用这种 JDK 开发 J2EE 应用程序
J2ME,micro edtion,主要用于移动设备、嵌入式设备上的 java 应用程序
Jre【Java ?Runtime ?Enviromental】是 java 运行时环境,那么所谓的 java 运行时环境,就是为了保证 java 程序能够运行时,所必备的一基础环境,也就是它只是保证 java 程序运行的,不能用来开发,而 jdk 才是用来开发的,所有的 Java 程序都要在 JRE 下才能运行。
包括 JVM 和 JAVA 核心类库和支持文件。与 JDK 相比,它不包含开发工具——编译器、调试器和其它工具。
Jre 里边包含 jvm
Jvm:【Java Virtual Mechinal】因为 jre 是 java 运行时环境,java 运行靠什么运行,而底层就是依赖于 jvm,即 java 虚拟机,java 虚拟机用来加载类文件,java 中之所以有跨平台的作用,就是因为我们的 jvm
关系:
J2se 是基于 jdk 和 jre,
JDK 是整个 JAVA 的核心里边包含了 jre,
Jre 里边包含 jvm
报错的状态码:
301 永久重定向
302 临时重定向
304 服务端 未改变
403 访问无权限
200 正常
404 路径
500 内部错误
协议以及默认的端口号
ftp ??21 ???文件传输协议
Pop3 110 ?它是因特网 http://baike.baidu.com/view/1706.htm电子邮件 http://baike.baidu.com/view/1524.htm的第一个离线 http://baike.baidu.com/view/113466.htm协议标准
Smtp ?25 ??简单邮件传输协议
http ??80 ??超文本传输协议
oracle 默认端口号 1521
mysql 默认端口号 3306
评论