<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_42537795的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_42537795</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_42537795]]></copyright><item><title><![CDATA[FreeMarker模板引擎]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/107328334</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/107328334</guid><author>qq_42537795</author><pubDate>Tue, 14 Jul 2020 00:04:42 +0800</pubDate><description><![CDATA[课程介绍

了解模板引擎
掌握FreeMarker常用语法
在servlet中使用freeMarker

什么是模板引擎


数据 + 模板 = 结果


模板引擎将数据与展现有效的解耦



主流模板引擎

JSP
FreeMarker
Beetl ： Beetl是Bee Template Language的缩写，它绝不是简单的另外一种模板引擎， 而是新一代的模板引擎，它功能强大，性能良好，超过当前流行的模板引擎。而且还易学易用。

FreeMarker


Freemarker 是免费开源的模板弓|擎技]]></description><category></category></item><item><title><![CDATA[EL表达式和JSTL标签]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/107328229</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/107328229</guid><author>qq_42537795</author><pubDate>Mon, 13 Jul 2020 23:59:04 +0800</pubDate><description><![CDATA[EL表达式

EL(Expression Language)表达式语言，用于简化JSP的输出
EL表达式的基本语法：${表达式}

EL的作用域对象

EL表达式内置四中作用域对象
当我们忽略书写作用域对象时，EL则按作用域从小到大依次尝试获取
如果这四个作用域都没又匹配到，则会输出空字符串





作用域对象
描述




pageScope
当前页面获取值


requestScope
从当前请求中获取值


sessionScope
从当前会话中获取值


applicationScope
从整个w]]></description><category></category></item><item><title><![CDATA[Java语法糖]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/107007324</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/107007324</guid><author>qq_42537795</author><pubDate>Mon, 29 Jun 2020 00:07:40 +0800</pubDate><description><![CDATA[for VS for-each

优点：

 for-each 1从JDK5.0开始引入
 for-each 语法更简洁
 for-each 避免越界错误

缺点：

 for 可以删除元素，for-each不可以删除/替换元素
 for-each遍历的时候，是不知道当前元素的具体位置索引
 for-each只能正向遍历，不能反向遍历
 for-each不能同时遍历2个集合

for和for-each性能接近。

枚举类型
枚举变量：变量的取值只在一个有限的集合内。
enum Weekday {
    M]]></description><category></category></item><item><title><![CDATA[SQL语言（三）数据库操纵语言]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106957295</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106957295</guid><author>qq_42537795</author><pubDate>Thu, 25 Jun 2020 13:50:19 +0800</pubDate><description><![CDATA[DML，英文叫做 Data Manipulation Language，数据操作语言，我们用它操作和数据库相关的记录，比如增加、删除、修改数据表中的记录。
删除数据表中的记录
我们只能删除整个元组，而不能只删除某些属性上的值。SQL用如下语句表示删除：
delete from r
where P;

其中P代表一个谓词，r代表一个关系。
例，从instructor关系中删除与Finance系教师相关的所有元组。
delete from instructor
where dept_name =‘Finance]]></description><category></category></item><item><title><![CDATA[SQL语言（二）数据库查询语言第二部分（嵌套子查询）]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106903932</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106903932</guid><author>qq_42537795</author><pubDate>Thu, 25 Jun 2020 13:05:27 +0800</pubDate><description><![CDATA[在Biology系
开设的所有课
程集合]]></description><category></category></item><item><title><![CDATA[SQL语言（二）数据库查询语言第一部分（SQL查询）]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106895421</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106895421</guid><author>qq_42537795</author><pubDate>Mon, 22 Jun 2020 10:28:54 +0800</pubDate><description><![CDATA[SQL查询的基本结构

一、select子句
注意：

SQL不允许在属性名称中使用字符-，例如，使用dept_name代替dept-name。
SQL不区分字母的大小写。因此，你可以使用大写字母或小写字母命名表、属性等。

SQL允许在关系以及SQL表达式结果中出现重复的元组

若要强行去除重复，可在select后加入关键词distinct。
例，查询instructor关系中的所有系名，并去除重复select distinct dept_name 
from instructor;


SQL也允许我们]]></description><category></category></item><item><title><![CDATA[SQL语言（一）数据库定义语言DDL]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106894859</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106894859</guid><author>qq_42537795</author><pubDate>Mon, 22 Jun 2020 08:36:29 +0800</pubDate><description><![CDATA[我们可以把 SQL 语言按照功能划分成以下的 4 个部分：

DDL，英文叫做 Data Definition Language，也就是数据定义语言，它用来定义我们的数据库对象，可以创建，删除和修改数据库和表结构。
DML，英文叫做 Data Manipulation Language，数据操作语言，我们用它操作和数据库相关的记录，比如增加、删除、修改数据表中的记录。
DCL，英文叫做 Data Control Language，数据控制语言，我们用它来定义访问权限和安全级别。
DQL，英文叫做 Data ]]></description><category></category></item><item><title><![CDATA[MyBatis入门]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106744899</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106744899</guid><author>qq_42537795</author><pubDate>Fri, 19 Jun 2020 23:59:51 +0800</pubDate><description><![CDATA[MyBatis介绍
MyBatics是对持久化对象的操作自动转换为关系数据库的操作。
也就是在关系型数据库和对象之间作一个映射。
注：对象持久化就是将对象存储在可持久保存的存储介质上，例如主流的关系数据库中。

MyBatis环境搭建

需要引入Jar包：

Mybatis的jar包
mysql-connector-java.jar	(mysql的JDBC驱动包)。


配置
SqlSessionFactory 的全局配置⽂件，⽂件名为conf。配置数据库的连接信息。
注意： 该⽂件需要放在根目录下，即sr]]></description><category></category></item><item><title><![CDATA[面向对象分析与设计——建模工具UML]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106617599</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106617599</guid><author>qq_42537795</author><pubDate>Mon, 08 Jun 2020 16:42:56 +0800</pubDate><description><![CDATA[用例图（Use Case Diagrame）：描述了人们希望如何使用一个系统，将相关用户、用户需要系统提供的服务以及系统需要用户提供的服务更清晰的显示出来，以便使系统用户更容易理解这些元素的用途，也便于开发人员最终实现这些元素。
之所以说用例图至关重要，是由于用户并不关心系统的实现和内部结构，只关心产品所呈现出来的外部特征动态。而用例图恰好就是描述软件产品外部特性的视图，它从用户的角度而不是从开发者的角度来描述需求，分析产品的功能和动态行为。
活动图（Activity Diagram）：主要描述用户的那个业]]></description><category></category></item><item><title><![CDATA[链表]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106547097</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106547097</guid><author>qq_42537795</author><pubDate>Thu, 04 Jun 2020 15:27:31 +0800</pubDate><description><![CDATA[链表VS数组

数组简单易用，在实现上使用的是连续的内存空间，可以借助CPU的缓存机制，预读数组中的数据，所以访问效率更高。而链表在内存中并不是连续存储，所以对CPU缓存不友好，没办法有效预读。
数组的缺点是大小固定，一经声明就要占用整块连续内存空间。如果声明的数组过大，系统可能没有足够的连续内存空间分配给它，导致“内存不足（out ofmemory）”。如果声明的数组过小，则可能出现不够用的情况。这时只能再申请一个更大的内存空间，把原数组拷贝进去，非常费时。链表本身没有大小的限制，天然地支持动态扩容，我觉]]></description><category></category></item><item><title><![CDATA[数组]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106471432</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106471432</guid><author>qq_42537795</author><pubDate>Mon, 01 Jun 2020 14:26:12 +0800</pubDate><description><![CDATA[它用一组连续的内存空间，来存储一组具有相同类型的数据。
数组支持随机访问：a[i]_address = base_address + i * data_type_size，根据下标随机访问的时间复杂度为O(1)。

容器能否完全替代数组？

ArrayList最大的优势就是可以将很多数组操作的细节封装起来。比如前面提到的数组插入、删除数据时需要搬移其他数据等。另外，它还有一个优
势，就是支持动态扩容。
因为扩容操作涉及内存申请和数据搬移，是比较耗时的。所以，如果事先能确定需要存储的数据大小，最好在创建Ar.]]></description><category></category></item><item><title><![CDATA[面向对象分析与设计——建模工具UML：用例图]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106208842</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106208842</guid><author>qq_42537795</author><pubDate>Sun, 24 May 2020 11:40:04 +0800</pubDate><description><![CDATA[为什么要建模?

因为不能完整地理解一个复杂的系统，所以要对它建模
建模是为了能够更好地理解正在开发的系统
建模的四个目的：

帮助我们按照需要对系统进行可视化
允许我们详细说明系统的结构和行为
给出了一个指导我们构造系统的模板
对我们所做出的决策进行文档化



UML是啥？
uml：统一建模语言。

事物与事物之间必定存在关系，将这些事物和关系结合在一起，就构成了图。
最重要的图有以下几种：

用例图和活动图是用来捕获需求的。
类图是用来做设计的。
顺序图和通信图是用来验证类图设计的对不对。
状态图

]]></description><category></category></item><item><title><![CDATA[Java集合]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106258924</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106258924</guid><author>qq_42537795</author><pubDate>Thu, 21 May 2020 15:23:29 +0800</pubDate><description><![CDATA[集合
Java标准库自带的java.util包提供了集合类：Collection，它是除Map外所有其他集合类的根接口。Java的java.util包主要提供了以下三种类型的集合：

List：一种有序列表的集合，例如，按索引排列的Student的List；
Set：一种保证没有重复元素的集合，例如，所有无重复名称的Student的Set；
Map：一种通过键值（key-value）查找的映射表集合，例如，根据Student的name查找对应Student的Map。

最后，Java访问集合总是通过统一的方]]></description><category></category></item><item><title><![CDATA[Java多线程(三)线程管理]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106178884</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106178884</guid><author>qq_42537795</author><pubDate>Sun, 17 May 2020 20:47:04 +0800</pubDate><description><![CDATA[wait()和notifyAll()
synchronized解决了多线程竞争的问题，但是synchronized并没有解决多线程协调的问题。
多线程协调运行的原则就是：当条件不满足时，线程进入等待状态；当条件满足时，线程被唤醒，继续执行任务。
我们可以使用wait()和notifyAll()解决多线程协调运行：

wait()使线程进入等待状态；
notifyAll()唤醒当前锁对象的所有等待线程；

wait()和notifyAll()需要使用在锁对象上。在synchronized修饰的方法中，就是th]]></description><category></category></item><item><title><![CDATA[Java多线程(二)Java多线程信息共享]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106174647</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106174647</guid><author>qq_42537795</author><pubDate>Sun, 17 May 2020 15:41:11 +0800</pubDate><description><![CDATA[Java通过共享变量在多个线程中共享消息：

静态变量
同一个Runnable类的成员变量

public class ThreadDemo0
{
	public static void main(String [] args)
	{
		new TestThread0().start();
		new TestThread0().start();
		new TestThread0().start();
		new TestThread0().start();
	}
}
class TestThread0]]></description><category></category></item><item><title><![CDATA[Java多线程(一)创建和启动]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106173804</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106173804</guid><author>qq_42537795</author><pubDate>Sun, 17 May 2020 14:56:06 +0800</pubDate><description><![CDATA[Java多线程创建
创建Java多线程有两种方式：

java.lang.Thread
– 线程继承Thread类，实现run方法。
java.lang.Runnable接口
– 线程实现Runnable接口，实现run方法。

public class Thread1 extends Thread{
	public void run() {
		System.out.println("hello");
	}
	public static void main(String[] a) {
		new Thre]]></description><category></category></item><item><title><![CDATA[文件IO]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106146556</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106146556</guid><author>qq_42537795</author><pubDate>Fri, 15 May 2020 19:18:26 +0800</pubDate><description><![CDATA[InputStream
InputStream并不是一个接口，而是一个抽象类，它是所有输入流的超类。
这个抽象类定义的一个最重要的方法就是int read()，签名如下：
public abstract int read() throws IOException;这个方法会读取输入流的下一个字节，并返回字节表示的int值（0~255）。如果已读到末尾，返回-1表示不能继续读取了。

...]]></description><category></category></item><item><title><![CDATA[File对象]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106141743</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106141743</guid><author>qq_42537795</author><pubDate>Fri, 15 May 2020 15:33:35 +0800</pubDate><description><![CDATA[创建File对象
public class Main {
    public static void main(String[] args) {
    	//构造一个File对象需要传入一个路径
        File f = new File("C:\\Windows\\notepad.exe");
        System.out.println(f);
    }
}

注意:Windows平台使用\作为路径分隔符，在Java字符串中需要用\\表示一个\。Linux平台使用/作为路径分隔符。]]></description><category></category></item><item><title><![CDATA[static、final和常量设计]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106113220</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106113220</guid><author>qq_42537795</author><pubDate>Thu, 14 May 2020 12:11:24 +0800</pubDate><description><![CDATA[static修饰符
静态变量

static变量只依赖于类存在（通过类即可访问），不依赖于对象实例存在。
所有实例共享该字段。

静态方法

调用静态方法不需要实例，通过类名就可以调用。
在静态方法中，只能使用静态变量，不能使用非静态变量，也不能使用this。
静态态方法常用于工具类和辅助方法。

static块

这段代码只运行一次，只在类第一次被加载时调用。
执行顺序：static块 &gt; 匿名块 &gt; 构造函数。


final修饰符

final的类：不能被继承。
final方法：父类中如果]]></description><category></category></item><item><title><![CDATA[equals()和hashcode()]]></title><link>https://blog.youkuaiyun.com/qq_42537795/article/details/106040110</link><guid>https://blog.youkuaiyun.com/qq_42537795/article/details/106040110</guid><author>qq_42537795</author><pubDate>Sun, 10 May 2020 18:42:30 +0800</pubDate><description><![CDATA[== 和 equals的区别
==被我们常用来比较基本数据类型的值，对于比较对象时我们一般是使用equals方法的，我们知道所有的类都是继承自Object类的。其实在Object中的equals方法就是使用==来比较的。
也就是说==也是可以用来比较对象的，正如Object类中一样。但是如果用双等号比较对象，比较的是对象在内存中的地址，而不是值。所以一般在我们的业务场景中，例如：
public class House {
    private int houseShape;// 房子户型
    priv]]></description><category></category></item></channel></rss>