文章目录


基础 + jvm


- 格式 + 常识


- - 1:可以用作标识符的是 - 【易误】

  • <mark>String 就是个类名,不是关键字,可以作为标识符</mark>
  • <mark>$ 可以作为标识符</mark>

- - 2 : 下列数组的声明有哪些是对的? - 【易误】


可行的

		int[] aaa ; 
		int[] bbb = new int[2];
		int[] ccc = new int[]{1,2,3} ;


- String


- - 1 : 编译 String String=”String” - 【好题】

Java 里面 String 就是一个类!!!(当然,有点特殊)
String 不是关键字 。


- - 2:String 拼接(反编译分析) - 【好题】


- - - 分析:

字符串拼接时,

  1. 如果用引用代表要拼接的字符串, 如:String b2 = a0 + "ccc" //a0 是常量池中"ccc"的引用
    编译时会new StringBuilder,通过StringBuilder拼接。
    拼接结果的引用会指向堆中new 出来的StringBuilder

  2. 如果没有引用,直接是常量池中字符串的拼接,如String b1 = "ccc" + "ccc" ;
    编译时,会看常量池中有没有拼接结果,如"cccccc"
    有,结果的引用就直接指向常量池,如直接指向常量池中的"cccccc"
    没有,就在常量池中添加常量。


- - - 测试:

Part 0 : 完成测试代码

用 <mark>工具 javap -c</mark> StringEqualTest.class
反编译下面代码,分析

Part1 : String常量对比

		/* * 1. 常量对比 */
		String a = "cc" ;
		String b = "cc" ; 
		String c = "------------------" ;
		boolean flag = a == b ; 
		c = "------------------" ;
		System.out.println(flag); // true
		c = "------------------" ;

Part2:String常量拼接对比

		String a0 = "ccc" ; 
		String a1 = "cccccc" ;
		
		String a ;
		a = "----------------";
		String b = a0+a0 ;
		a = "----------------";
		String b1 = "ccc" + "ccc" ;
		a = "----------------";
		
		String b2 = a0 + "ccc" ; 
		
		a = "----------------";
		System.out.println(a1 == b1); //true
		System.out.println(b1 == b ); //false 
		System.out.println(b2 == b ); // false 

- - 3 : new String 创建多少个对象? - 【好题】

  • String s = new String(“abc”) ;
    一个:常量池有"abc",创建堆String
    两个:常量池没有"abc",创建常量池"abc",堆String

- 数组

- - 1. 存储在数组中的数据都属于同一数据类型 ? - 【易误】


- - - 一种解释
long[] l ={1,2 , 3L , (byte)1}; //不报错

- - - 另一种解释

向上造型

public class Test {
	public static void main(String[] args) {
		B[] as = new B[] {
			new A() ,
			new B()
		};
	}
}
class A extends B {}
class B {}

文章目录


Java 技术规范

XML 属于 Java 技术规范 - 【记!】


文章目录


线程


- - 1 : corePoolSize、maximumPoolSize、 - 【理解】


- - 2 : 线程方法 - start()/notify()/wait()/sleep() - 【常识】

- - 3. 每个对象都有多个的同步锁。( <mstyle mathcolor="&#35;f01"> </mstyle> \color{#f01}{错的!} ) - 【理解】

- - 4 。 在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。 - 【理解】


文章目录


异常


- - 1: 那种异常是检查型异常 / 需要在编写程序时声明? 【记!!!】

<mark>RuntimeException及其子类型不用显示声明</mark>:

RuntimeException子类

1 NullPointerException,这个不用多说了。

2 NumberFormatException,字符串转化成数字时。

3 ArrayIndexOutOfBoundsException, 数组越界时。

4 StringIndexOutOfBoundsException, 字符串越界时。

5 ClassCastException,类型转换时。

6 UnsupportedOperationException,该操作不支持,一般子类不实现父类的某些方法时。

7 ArithmeticException,零作为除数等。

8 IllegalArgumentException,表明传递了一个不合法或不正确的参数

**
继承RuntimeException的异常:
<mark>大多数错误并不是由于程序本身有问题</mark>,而是运行时输入在某些case下导致的,有更多的不确定性。
而且Java开始的时候并没有异常处理机制,所以从<mark>兼容性</mark>到<mark>实现代价</mark>来讲就设计成这个样子了。


- - 2. 如果某异常继承 RuntimeException,则该异常可以不被声明? - 【理解】


总结如下 ↓ ↓ ↓ ↓
继承RuntimeException的异常:
<mark>大多数错误并不是由于程序本身有问题</mark>,而是运行时输入在某些case下导致的,有更多的不确定性。
而且Java开始的时候并没有异常处理机制,所以从<mark>兼容性</mark>到<mark>实现代价</mark>来讲就设计成这个样子了。

RuntimeException类型的异常

  • ArithmeticException:数学计算异常。
  • <mark>NullPointerException</mark>:空指针异常。
  • NegativeArraySizeException:负数组长度异常。
  • ArrayOutOfBoundsException:数组索引越界异常。
  • <mark>ClassNotFoundException</mark>:类文件未找到异常。
  • <mark>ClassCastException</mark>:类型强制转换异常。
  • SecurityException:违背安全原则异常。

非RuntimeException类型的常见异常

  • <mark>NoSuchMethodException</mark>:方法未找到异常。
  • <mark>IOException</mark>:输入输出异常。
  • EOFException:文件已结束异常。
  • <mark>FileNotFoundException</mark>:文件未找到异常。
  • NumberFormatException:字符串转换为数字异常。
  • SQLException:操作数据库异常

文章目录


MySQl - 数据库


- - 1 : JDBC 基本 - 流程 - 【简单】

之前没概念,学了jdbc之后,就非常简单了。下面放入具体的代码

首先,导入jar包:mysql-connector-java-5.1.32.jar
下载链接:

	@Test
	public void testFindAll() throws ClassNotFoundException, SQLException {
		//1. 注册数据库驱动(Driver) - 导入jar包:mysql-connector-java
		Class.forName("com.mysql.jdbc.Driver") ; 
		/** * 解释: * ------- * jdbc:jdbc服务 * mysql:使用mysql的jdbc服务 * localhost:使用本地的mysql的jdbc服务 * 3306:使用本地的3306端口的mysql的jdbc服务 * ------- * jt_db 使用的数据库 * characterEncoding=utf-8 设置编码utf-8 * * 面向接口编程 - 思想 */
		//2. 获取数据库连接
		/*Connection conn = DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/jt_db?characterEncoding=utf-8", "root", "root");*/
		Connection conn  = DriverManager.getConnection(
				"jdbc:mysql:///jt_db",
				"root",
				"root");
		/** * statement : 声明 */
		//3. 获取传输器
		Statement stat = conn.createStatement();
		
		String sql = "select * from account;";
		//4. 执行SQL语句,返回执行结果
		ResultSet rs = stat.executeQuery(sql);
		/** * 理解ResultSet结构: * +----+------+-------+ * | id | name | money | 表头 ←—————————— 指向1 rs.next() true/false * +----+------+-------+ ←—————————— 指向2 true rs.get类型("列名") * | 1 | tony | 1000 | ... * | 2 | tom | 1000 | ... * | 3 | andy | 1000 | ←—————————— 指向n true rs.get类型("列名") * +----+------+-------+ ←—————————— 指向n false rs.get类型("列名") */
		//5. 处理结果
		while (rs.next()) {
			int id = rs.getInt("id") ;
			String name = rs.getString("name");
			double money = rs.getDouble("money");
			System.out.println(id+" : "+ name+" : "+ money);
		}
		//6. 释放资源
		rs.close();
		stat.close();
		conn.close();
	}

- - 2 : Connection 获取 PreparedStatement接口 的方法 (prepareStatement) - 【记】

- - 3 . 可以声明多个列一起作为主键,称为联合主键 - 【记】

CREATE TABLE `test` ( 
`id` int(11) NOT NULL AUTO_INCREMENT, 
`date` varchar(25) DEFAULT NULL, 
`sess_id` varchar(255) DEFAULT NULL, 
`keyword` varchar(25) NOT NULL, 
`url_n` varchar(3) DEFAULT NULL, 
`s_n` varchar(3) DEFAULT NULL, 
`select_url` varchar(255) DEFAULT NULL, 
PRIMARY KEY (`id`,`keyword`) 
) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 

《mysql的联合主键(组合主键)》 - https://blog.csdn.net/yiqiu3812/article/details/92847056


文章目录


Servlet

基本

- - 1 . <.url-pattern> - <mstyle mathcolor="&#35;f01"> u r l u r i </mstyle> \color{#f01}{注意:url - 不是 uri!!!} urluri - 【记!!!】

  • URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,
  • 而URL则必须提供足够的信息来定位,是绝对的。

《URI和URL的区别比较与理解》 - https://blog.csdn.net/qq_32595453/article/details/80563142

- - 2 . 一个Servlet中可以转发两次 <mstyle mathcolor="&#35;f01"> </mstyle> \color{#f01}{错!} ↓ - 【记】

- - 2。 response 最终输出的是转发过程中最后一个节点的数据 - 【记!!!】

- - 3 . 【生命周期】 - Servlet的生命周期由Servlet实例控制 <mstyle mathcolor="&#35;f01"> </mstyle> \color{#f01}{错!} ↓ ↓ ↓ ↓ - 【坑!】

- - 3 . 【生命周期】 - init()方法在创建完Servlet实例后对, <mstyle mathcolor="&#35;f01"> S e r v l e t </mstyle> \color{#f01}{Servlet} Servlet 调用该方法进行初始化 <mstyle mathcolor="&#35;f01"> </mstyle> \color{#f01}{错!} - 【坑】

  • Servlet的生命周期【可以】由Servlet实例控制
  • init()方法在创建完Servlet实例后对, 【Servlet 容器】调用该方法进行初始化

初始化阶段步骤:
Ø Servlet容器加载servlet类,把它的. Class文件中的数据读到内存中。
Ø Servlet容器创建servletConfig对象。servletConfig对象包含了servlet的初始化配置信息。此外servlet容器还会使得servletConfig对象与当前的web应用的servletContext对象关联。
Ø Servlet容器创建servlet对象。
Ø Servlet容器调用servlet对象的init(ServletConfig config)方法。
通过初始化步骤,创建了servlet对象和servletConfig对象,并且servlet对象与servletConfig对象关联,而servletConfig对象又与当前对象的servletContext对象关联。当servlet容器完成servlet后,servlet对象只要通过getServletContext()方法就能得到web应用的servletContext对象。

4. 定时刷新可以实现在跳转之前的这段时间输出数据到客户端浏览器 - 【理解】

- 乱码问题

- - 1. HTTP 协议不支持非 ISO8859-1 的字符 - 【记!!!】

- - 2. 对于get方式提交的请求参数,我们需要自己手动的经过将乱码先编码再解码的过程解决乱码。 - 【理解!!】 【好题】


发送get请求的时候,

  • 首先页面会进行UTF-8编码, ---------》 (html 文件的保存编码)

    ↓ (文件路径 ------》 uri 上的路径,如:http://12.70.0.1:8080/file/你好!
  • 然后传送的时候http又对页面进行ISO-8859-1编码,

    ↓ (uri 上的路径,如:http://12.70.0.1:8080/file/你好! ------》 请求头文件,如:http://127.0.0.1:8080/file/%1f%ff
  • 而传输中实际上还有一个针对于url的编码。

然后服务器拿到数据以后,

  • 首先会针对于url编码自动解码,
  • 但是http中的ISO-8859-1没进行解码,

    ↓(要 tomcat 服务器帮忙,或者手动设置) - 默认 request.getCharacterEncoding=ISO-8859-1
  • 还有页面的utf8也没有解码。

所以出现乱码现象。

总之get请求,经历过三次编码—页面的声明编码,https传送编码,url编码。而其中,url的编码服务器是会自动解码的。(URL是针对那种get请求后面携带中文参数发给服务器,比如下载功能、预览功能。)
/
《 解决 Get 和 Post 和客户端,get请求URL传中文参数等乱码问题 》https://blog.csdn.net/ITBigGod/article/details/83750336

- - 3. doGet() 乱码可以通过response.setContentType(“text\html,charset=utf-8”);来解决 <mstyle mathcolor="&#35;f01"> </mstyle> \color{#f01}{错!} - 【理解!】 【好题】

  • Response.setContentType(MIME)的作用是使客户端的浏览器区分不同种类的数据,
    并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
    (处理 doPost 乱码问题)

  • 而 doGet 是服务器的锅 (看问题2)
    (所以 doGet 要在 tomcat 中设置 第二次解码的格式 )


反射

- - 1 . 在运行中分析类的能力


文章目录


正则表达式


  1. 负整数 ^-[0-9]*[1-9][0-9]*$

  2. 非正整数 ^(-\d+|(0+))$


文章目录


前端

- JavaScript

- - 1 . 伪随机数 random


javaScript - api 工具 https://www.w3cschool.cn/javascript/dict

  • 向上取舍 ceil
  • 向下取舍 floor
  • 四舍五入 round

- - 2. var obj = //; - 【好题】

- - 3 . 失去焦点的事件 onblur

- html

- - 1. 单元格之间宽度 - cellspacing / 单元格内容与单元格边框的距离 - cellpadding