码迷,mamicode.com
首页 > 编程语言 > 详细

JavaWeb基本知识点

时间:2018-02-01 23:14:55      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:jit   tty   维护   transient   机器   current   硬件设计   let   清除   

 

1、关键字

修饰符:  abstractclassfinalprivateprotectedpublicstatic7

数据类型:booleanbytechardoublefloatintlongshortvoid9

语句组成:breakcasecatchcontinuedefaultdoelseextendsfinally forifimplementsimportinstanceofinterfacenewpackage returnsuperswitchsychronizedthisthrowthrowstrywhile26

特殊含义关键字:assertconstgotoenumnativestrictfptransientvolatile7

assert: 断言,用于调试,多被junit代替,IDE默认不开启。

const:预留关键字。

goto:预留关键字。

enum: 枚举。

native: 本地方法。

strictfp: 精确浮点,可用于类、接口、方法。

transient: 免除变量序列化。

volatile: 被设计用来修饰被不同线程访问和修改的变量

java关键字:truefalsesizeofnullserilizable

 

 

2、标识符

  标识符是用来标识类名、变量名、方法名、类型名、数组名及文件名的有效字符序列。

1、标识符由字母、数字、下划线、美元符号组成,长度不受限制。

2、第一个字符不能为数字。

3、标识符不能是关键字。

4、标识符不能是truefalsenull(字面常量)

 

 

3、基本类型和引用类型

Java中基本类型有四类八种,也称为原生类、内置类。其余的都属于引用类型

整数:(byteshortintlong)       引用类型:(ByteShortIntegerLong)

浮点:(floatdouble)   引用类型:(FloatDouble)

字符型:(char2)   引用类型:(Character)

逻辑型:(bolean1)   引用类型:(Boolean)

 

引用类型一般有 数组(数组是一种对象,有行为,大小一旦确定,不能改变)、类、接口。

 

3、publicdefaultprotectedprivate

 

 

4、staticFinalabstract

  static :

静态方法属于类,静态方法在对象实例创建前已经存在了,它的使用不依赖对象是否被创建,当我们通过实例来调用方法时,实际上还是把实例对象转换成类去调用方法,这里的null没有意义。((TestClass)  null).testMethod();可以写成TestClass t = null; t.testMethod(); null可以被强制转换成任意类型对象。(空指针可以操作 类变量和类方法)

静态方法不能引用非静态变量。

 

 

Final: 可以用来修饰类、变量、方法、引用。类不能被继承,方法不能被重写,可以继承和重载。变量经修饰变为常量。

final修饰的对象引用不能变,但内容可变。p.name=”aaa”; p.name=”bbb”;但对于String(只读类型的引用???)特殊,final String str=”aaa”; str=”bbb”; //编译不通过,引用被改变。

final修饰方法:声明final就是防止功能被修改。

 

 

 

5== equals

   == 比较类型和值(也可以说是比较地址)

   equals 底层也采用 == 做比较,但String中重写了Object中的此方法,用于比较字符串的内容。

 

 

6、字符容器(StringStringBufferStringBuilder

7.

 

 

// 陌生单词:compile编译

 

8、常用类(内部类、匿名类、抽象类)

  内部类:

静态内部类才可以定义static方法,

 

  抽象类:

抽象方法中不能有方法体

 

 

9、字符问题

10、三大特性(封装、继承、多态)

11、继承(extends

12、接口(implements

13、重写和重载

 

 

15、数组

16、泛型

17、语法基础

18hashcodeequals

19、类的加载执行

类的加载顺序:

父类静态块--子类静态块--父类初始化块--父类构造方法--子类初始化块--子类构造方法

 

20、网络通信(Socket

19、调用方法的参数传递问题

21public static void main(String[]  args){}

 

 

 

 

JavaWeb相关:集合、多线程、JVM、常用类、版本区别、

 

1、编码问题(Get\POST

① html页面:浏览器会根据<http header:content-type=text/html;  charset=”UTF-8”>的值来决定用什么encoding(编码),离线的本地html要在meta中指定,不指定会采用默认的编码<meta http-equiv=”Content-Type” content=”text/html”; charset=”UTF-8”>

② Request request.setCharacterEncoding(“UTF-8”)应用于通过getParameter()获取字符串,只对POST有效。必须设置在servletgetParameter()方法被调用之前,原因是:只有在第一次调用getParameter()方法时会查询encoding编码格式,后续的getParameter将不再查询编码格式。

 对于GET提交,get提交的内容存在URL中,需在Tomcatserver.xml设置,在Connector标签中设置生成URI时的编码格式 URIEncoding=”UTF-8”(个人理解为 针对URI这一特殊类型数据,在server中统一设置编码格式,不管是在JSP还是Servlet中出现,都使用统一的解码方式,避免了乱码的发生)。默认为ISO8859-1

③ Resopnse response.setContentType(“text/html”;charset=”UTF-8”)是指定HTTP响应的编码,同时指定浏览器(JSP)的显示编码,显示编码不一定在JSP中有效果,因为JSP中设置的编码格式优先级更高。

response.setCharacterEncoding(“UTF-8”)的作用是设置HTTP的响应编码,设置应在getWriterresponse被提交之前。(个人理解为 此编码的设置是针对要返回的数据进行编码生成response,再返回)

JSP<%@page ContentType=”text/html;charset=UTF-8”%>

<%@page pageEncoding=”charset=UTF-8”%>

以上两种编码只有一种有效,用于设置 页面的显示编码。

如果页面中使用include标签导入了其他的JSP<%@ include file=”BB.jsp”%>设置的BB.jsp中不能再设置编码,<jsp:include page=”BB.jsp”/>设置,BB.jsp中还可以设置编码集。

 

 

 

对于URLURI的区别。请看:https://www.cnblogs.com/hust-ghtao/p/4724885.html

 

2、JSP九大内置对象

3、集合(map

   集合主要有VectorHashTableArrayListHashMapstack

①、Vector 默认初始化容量为10,扩容为1倍扩容。比ArrayList多了同步机制,效率较低,已弃用。

②、HashTable 默认初始化容量为11,扩容为2倍。比hashmap多了同步机制,是线程安全的,对整张哈希表加锁。已弃用。

 

③、concurrentHashMap是线程安全的,将Hash表分为16(segment),每次只对需要的桶加锁,在JDK1.8之后,ConcurrentHashMap并不再是分段锁,而是更细粒度的锁,只是在修改map时对链表头加锁。(红黑树根)

④、HashMap 默认初始化容量为16,扩容为2+1。未进行同步考虑,是线程不安全的,

⑤、ArrayList 默认初始化容量为10,扩容为1.5倍扩容。有三个构造函数。

Arraylist()构造一个初始化容量为10的空列表。

Arraylist(Collection<?  extends  E>  c)构造一个包含指定collection的元素列表,按迭代器返回它们的顺序。?

Arraylist(int  initialCapacity)构造一个指定容量列表的空列表。

 

⑥、stack堆栈类,继承了vector.

⑦、enumeration 枚举,相当于迭代器

 

 

Collections 类提供了sychronizedXxx()方法,可以将指定集合包装成线程安全的集合。

比如:List list = Collections.synchronizedList(new ArrayList());

  Set set = Collections.synchronizedSet(new HashSet());

 

 

 

4、常用类(Stringservlet、集合、异常类)

 

异常:try-catch-finally

   如果tryreturn有执行语句,例如:return i--;  i--会执行,而return不会执行,进入finally

finally中的语句不能影响try/catch中已经确定的i值,(可以说try/catch可以传递值到finally中,finally就像一个方法,i值就像一个参数,并不能把值传递回去)。最后从try中返回出itry中的值。

结论:return 并不是函数的最终出口,也就是说遇到return要考虑是否还有finally要执行。如果存在funally代码块,会在return之前执行finally中的代码。

①. trycatchfinally都有return语句,返回finally的值。(try会执行return之后的语句,例如:i--);

②. trycatch中有return语句。没有异常,执行完finally,返回itry块中的值。

③. try中抛出异常,trycatchfinally中都有return,返回finally中的值。

④. try中抛出异常,trycatch中都有return,返回catch中的值。

⑤. trycatch中都出现异常,在finally中有返回,返回finally中的值。

finally中不建议放return语句,return语句可以放在trycatch里面和函数的最后。

 

异常分类:

所有的异常都继承自java.lang.Exception类。

检查性异常:不处理编译出错,===》非运行时异常 一般daothrows抛,servicecatch

非检查性异常:如果有抛出直接抛到控制台,==RuntimeException 运行时异常

 

 

 

 

5requestresponse

6、字符流到字符流的转换

7、转发与重定向

8、会话跟踪

9cookie

10session

11、表单域

12URL重写

13Servlet

14Filter

15、对象的初始化

16Error.jsp

17Properties

18\ /

19、日志

20Volatile

  volatile 修饰成员变量被线程访问时,都强迫线程从共享内存中重读该成员变量的值。而且,当其值发生变化,强迫线程将变化之后的值写到共享内存中。故两个线程总是能看到同一个值。如此一来,一个volatile对象的引用可能为null(提示该变量的值已经改变,需要从原始内存地址中读取该值)

  使用地方: 1. 中断服务程序中修改的供其他程序检测的变量加 volatile

  1. 多任务环境下各任务间共享的标志应该加volatile
  2. 存储器映射的硬件寄存器通常也要加 volatile说明,因为每次读写都有不同意义

另外:还要考虑数据的完整性(相关联的几个标志读了一半被打断重写)

 1.通过关中断来实现,  2.可以禁止任务调度, 3.依靠良好的硬件设计,

 

 

21transient

 

21、JVM相关(类的加载和执行)

1JVM的功能:

a.通过ClassLoader寻找和装载class文件

b.解释字节码成为指令并运行,提供class文件运行环境

c.进行运行期间垃圾回收

d.提供与硬件交互的平台

2JVM线程:如果使用jconsole或其他调试器,会看到很多线程在后台运行,主要有JVM线程、触发main方法的主线程以及主线程创建的其他线程一起运行。

3、虚拟器线程等待JVM到达安全点之后出现,操作必须在独立的线程里执行,因为当堆修改无法进行时,线程需要JVM位于安全点。VMThread包括stop-the-world垃圾回收、线程栈dump、线程暂停、线程偏向锁(basicObjectLock)解除。

4JVM维护了一个数据结构,记录了所有的线程,所以它可以快速检查所有线程的状态。

5safePoint安全点可以挂起线程,防止线程无限运行,一般位于循环末尾(防止大循环)、方法返回前、调用方法的call之后、抛出异常的位置。

6JVM有两种执行方法:解释型和编译型(JIT)

JIT执行方式下,将safepoint的检查代码加入到本地代码,当JVM需要线程进入safepoint时,只需要设置标志位,运行到标志位,如果标志位被设置则进入safepoint

在解释型执行下,JVM会设置一个2字节的dispatch tables解释器,执行过程中会经常检查这个dispatch tables,当有请求发生时,则让线程进入safepoint

7、GC的时候,所有进入safepoint的线程会在一个Thread.lock锁阻塞,直到当JVMGC完成操作,JVM释放锁,阻塞的JAVA线程才能运行。

8、safepoint 只能处理一些正在运行的线程,对于一些sleep()block()的线程会被添加到safe region区域。标记safe region。当它被唤醒时,应该先检查GC是否完成操作。

9、周期性任务线程:该线程负责定时器事件(也就是中断),用来调度周期性操作的执行。

10、GC线程:这些线程支持JVM中不同的垃圾回收活动。

11、编译器线程:这些线程在运行时将字节码动态编译成本地平台相关的机器码。

12、信号分发线程:这个线程接收发送到JVM的信号并调用适应的JVM方法处理。

13、对象的回收:对象、数组存放在JVM堆中,分为新生代和老年代。新生代分为三个区,一个Eden、两个servivor,对象创建之后存在Eden(容量很大的对象可以创建到老年代)。新生代会执行MinorGC98%的对象会被回收,不被回收的对象转移(复制算法)到一个survivor中,然后等待下一次MinorGCGC之后Eden剩下的对象和survivor中的对象都被转移到另一个servivor中,对象就在两个survivor中不断转换。直到经历15MinorGC才能进入老年代(old)old中会执行FullGC,但比MinorGC的执行频率要低很多。FullGC一般耗时为MinorGC22.89倍。新生代一般18M,老年代一般42M

虚拟机中的线程图示:

 

 

 

 

操作系统分配给每一个线程2G的内存,2G = 堆内存+方法区+程序计数器+本地栈+线程栈

一般线程栈有1000-2000栈帧就够用于递归,如果发生内存溢出==没有多余的内容分配给新对象,可以适当的减少栈的容量,来扩大堆的容量。

 

 

 

 

 

 

22、版本区别(可变参数、枚举)

  JDK1.5版本变化:可变参数

JAVA支持传递同类型的可变参数给一个方法,一个方法只能指定一个位于参数末尾的可变参数;...在类型和参数名之间;以数组形式存在。

 

23、数据库(JDBCDBMS

   JDBCJNDI--DataSource---连接池(c3p0\dbcp\Proxool)----DriverManager---connection

数据库连接方式有两种:

  1.建立JDBC--ODBC桥接器(微软提供)依赖平台,

  2.直连纯Java数据库驱动(数据库厂家提供例如 mysqlmysql-connector-java.jar)

数据库实现查询功能:

  1. 加载JDBC驱动
  2. 建立并获取数据库连接----->通过连接池建立多个连接备用,使用什么连接池用户自定
  3. 创建JDBC statements对象--
  4. 设置SQL语句的传入参数->if,else判断传入的参数#变量名#占位符 $变量名$非占位符
  5. 执行SQL语句并获得查询结果
  6. 对结果进行转换处理并返回
  7. 释放相关资源

 

经过优化之后:

(1) 使用数据库连接池对连接进行管理

(2) SQL语句统一存放到配置文件中

(3) SQL语句变量和传入参数的映射以及动态SQL

(4) 动态SQL语句处理

(5) 对数据库操作结果的映射和结果缓存

(6) SQL语句的重复

 

JDBC-ODBC方式:

建立JDBC-ODBC桥接器,(使用java.lang中的class类,使用静态方法forName加载驱动)

创建ODBC数据源,

建立与ODBC的连接(可能异常)

 

 

 

 

24Web容器

25、常用APIString、集合、Thread

26JSP

  1JSP的九大内置对象及四个作用域

request       请求对象         类型:javax.servlet.servletRequest      作用域: Request

response       响应对象            javax.servlet.servletResponse             Page

pageContext    页面上下文对象       javax.servlet.jsp.PageContext              Page

session       会话对象               javax.servlet.http.HttpSession              Session

application       应用程序对象       javax.servlet.servletContext                Application

out               输出对象                javax.servlet.jsp.JSPWriter                 Page

config       配置对象                 javax.servlet.ServletConfig                 Page

page            页面对象                  javax.lang.Object                           Page

exception        例外对象         javax.lang.Throwable                          Page

     

PageContext(页面上下文)可对页面JSP中所有对象及名字空间访问页面功能集大成者。

exception 代表JSP文件运行时所产生的例外对象,此对象不能在一般JSP中使用,而只能在有此标签标示<% page isErrorPage = “true” %> JSP文件中使用。

Page作用域代表当前页面有效,一旦JSP页面结束,page中的数据将消失。

Request 作用域是请求过程,从JSP页面发出请求,到页面跳转转发,服务器servlet处理,发回响应。在forward转发的JSP页面都可以使用request中的数据。

Session作用域是会话,从打开浏览器就会创建一个session对象存储在浏览器,在浏览器关闭之前都可以使用session(用户独享)

Application 作用域是应用,从开启一个应用到应用结束,都可以使用Application(在服务器的运行过程中都可以使用,可以说是所有用户共用)

 

27、事件处理模型

28java特点

20、多线程(threadrunnablecollablecondition

1、守护线程(daemon):通过调用void setDaemon(boolean on)方法将自己设置成一个守护线程。thread.setDaemon(true); 当所有的用户线程执行结束后,即使守护线程的run()方法还有未执行语句,也会立刻结束线程。

2、从JDK1.5开始,Java提供了三种方式来创建线程:

继承Thread类创建多线程,重写run()方法作为线程执行体。(不能再继承其他类\每一条线程都是Thread子类的实例共享数据复杂)

实现Runnable接口来创建线程,重写run()方法作为线程执行体。Thread(Runnable in);

实现Callable接口创建线程,重写run()方法作为线程执行体。实现Callable可返回结果,可抛出异常,通过futureTask.get(),方法获取结果,如果没有结果返回,可能会阻塞主线程。

3、线程知识

t.start(); 方法启动一个线程,使其处于就绪状态,得到CPU就执行,而调用run()相当于普通的方法调用。start()方法将“新建”状态下的线程加入“就绪”队列中等待CPUrun()方法属于Thread(),没有内容,需要重写。调用start()会默认调用run()

**************************

***********************

******此处 缺一个 线程状态转换图

****

①、对象与线程之间完全解耦or弱解耦(用构造方法创建线程实现联系)

②、线程同步用sychronized修饰方法

③、协调同步用wait()等待其他线程完成工作(释放CPU资源)

④、线程联合,A联合BA立刻停止,让B先执行

⑤、守护线程做一些不重要的工作,一旦所有线程停止工作,守护线程立刻停止

  常用方法:start()run()sleep(ms)isAlive()===>false  true  false

Thread.currentThread() 返回正在实行的线程名称

Thread.interrupt() 用于将当前线程的中断标志位设置为true,如果是waitsleepjoin造成的阻塞,会重新将标志位设置为false,抛出interruptedException异常。如果是IO阻塞会抛出异常,如果是轮询,直接返回。如果是非阻塞的线程,进入阻塞会按照阻塞来处理,非阻塞中断标志位为true的线程遇到waitjoinsleep,直接抛出interruptException,中断标记被清除,设置中断标志位为false

4、同步监视器:

  任何线程进入同步方法,同步代码块之前,必须先获得同步方法,同步代码块对应的同步监视器。对于同步代码块,程序必须显式的为它指定同步监视器。

对于非静态同步方法,该方法的同步监视器是this--调用该方法的对象,

对于静态的同步方法,该方法的同步监视器是类。

Static Synchronized 是一个类的共用监视器,synchronized 是针对拥有同步方法的类 而存在的当前实例的监视器。

 

 

 

 

11、三大注解

22、内联函数

26、存根类(Stub

 

设计模式:

1、单例设计模式 懒汉模式

JavaWeb项目:

  1. 测试 2.梳理

 

 

算法、数据结构:

1.数组(数组复制) 2.冒泡算法

 

 

框架:

  1. Spring 2.struts  3. MyBatis 4.springMVC  5.Hibernate

 

1Spring是一个开源的Java/ Java EE全功能栈应用程序框架。

①、基于JavaBeans 的采用控制反转的配置管理,使得应用程序的组建更加快捷简易。

②、一个可用于从appletJavaEE不同运行环境的核心Bean工厂。

 

 

其他知识:

  1. 中间件
  2. 开发软件
  3. 管道
  4. Linux基本操作
  5. 数学建模
  6. 物联网

 

JavaWeb基本知识点

标签:jit   tty   维护   transient   机器   current   硬件设计   let   清除   

原文地址:https://www.cnblogs.com/yancy-/p/8401529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!