0%

提高代码重用性(相同的代码,不用多次编写)

代码可读性(编程规范性,便于自己及其他程序猿的阅读和理解)

可扩展性(当需要增加新的功能的时候,非常的方便,可维护)

可靠性(程序不容易出错,可靠性高 )

使程序呈现高内聚,低耦合的特性

Read more »

Java IO 的原理

IO是input和output的缩写,IO技术是非常实用的技术,用于处理设备之间的数据传输。例如读写文件,网络通讯等等。

Java程序中,对于数据的输入输出都是以“流(stream)”的方式进行

java。io包下提供了各种流的接口和类,用以获取不同种类的数据,并通过标准的方法输入或输出数据。

流的分类:

  • 按照操作数据单位,分为字节流和字符流
  • 按照数据流向:输入流和输出流
  • 按照流的角色:节点流和处理流
抽象基类 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
Read more »

基本概念

  • 程序(program): 是为完成特定任务,用某种语言编写的一组指令的集合。即值一段静态代码,静态对象。

  • 进程(progress):是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它的产生、存在和消亡的过程。–生命周期

  • 进程作为资源分配的单位,系统在运行时为每个进程分配不同的内存区域

  • 线程(thread):进程可进一步细化为线程,是程序内部的一条执行路径。

    • 若一个京城同一时间并行执行多个线程,就是支持多线程的
    • 线程作为调度和执行的单位,每个线程有独立的运行栈和程序计数器,线程切换的开销小
    • 一个进程中的多个线程共享相同的内存单元/内存地址空间->他们从同一堆中访问对象,可以访问相同的变量和对象。这就使得线程之间的通信你好忙的很简便高效。但是多个线程操作共享的系统资源就会带来一定的安全隐患。
  • 并行和并发

    • 并行:多个CPU同时执行多个任务。比如:多个人同时做不同的事
    • 并发:一个CPU(采用时间片)同时执行多个任务。比如:秒杀
  • 同步和异步

    • 需要等待结果返回才能继续运行就是同步
    • 不需要等待结果返回就能继续运行就是异步
  • 多线程的优点:

    • 提高应用程的响应。对图形化界面更有意义,可增强用户体验
    • 提高计算机系统的CPU利用率
    • 改善程序结构,将长而且复杂的进程分为多个线程,独立运行,利与理解和修改。
  • 合适需要多线程时机

    • 程序需要同时执行两个或者多个任务
    • 程序需要实现一些需要等待的任务时,如用户输入、文件读写、网络操作、搜索等
    • 需要一些后台运行的程序时
Read more »

AOP: 面向切面编程:基于OOP基础之上的新的编程思想

指的是在程序运行期间,将某段代码动态的切入到指定方法的指定位置进行运行的这种编程方式,面向切面编程

场景:计算器运行计算方法的时候进行日志记录

Read more »

通过17个实验来了解SpringIOC的基础知识

实验1: 第一个Spring项目

新项目的开始需要的步骤是:

导包、配置、测试

  1. Maven 项目需要的依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
Read more »

SpringMVC的基本概念

关于三层架构和MVC

三层架构

  • 开发服务器端的程序,一般都是基于两种形式,分别叫做B/S即浏览器服务器,和C/S即客户端服务器。
  • 使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构
  • 三层架构:
    • 表现层:WEB层,用来和客户端进行交互的,表现层一般会使用MVC的设计模型
    • 业务层:处理公司具体的业务逻辑
    • 持久层:用来操作数据库
Read more »

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就 “回溯” 返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为 “回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。

回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。

解决一个回溯问题,实际上就是一个决策树的遍历过程

1、路径:也就是已经做出的选择。

2、选择列表:也就是你当前可以做的选择。

3、结束条件:也就是到达决策树底层,无法再做选择的条件。

回溯算法最经典的问题是八皇后问题

问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

Read more »

二分查找(非递归)

介绍

  • 二分查找分为两种:递归和非递归
  • 一般情况只适用于从有序的数列中进行查找,或者将数列进行排序后进行查找
  • 时间复杂度为O(log2n)

代码实现

数组 {1,3, 8, 10, 11, 67, 100}, 编程实现二分查找, 要求使用非递归的方式完成.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private static int binarySearch(int[] arr, int target){
//定义结果,左节点和右节点
int res = -1, left = 0, right = arr.length-1;
//使用while循环 左右节点相等时退出循环
while(left <= right){
int mid = (left + right) / 2;
if(arr[mid] == target){
return mid;
}else if(arr[mid] > target){
right = mid;
}else{
left = mid;
}
}
return res;
}

最好使用[]的区间,使用(][)

Read more »

操作Blob类型数据

mysql中Blob类型

  • mysql中Blob是一个二进制的大型对象,是一个可以存储大量数据的容器,他能容纳不同大小的数据
  • 插入blob类型的数据必须使用Preparedstatement,因为BLOB类型的数据无法使用字符串拼接
  • Mysql中有四种类型的Blob(除了在储存的最大容量上的差别外,他们是等同的)
类型 大小(单位字节)
TinyBlob 最大255字节
Blob 最大65K
MediumBlob 最大16M
LongBlob 最大4G
  • 在实际开发过程中根据存入护具大小定义不同类型的BLob
  • 需要注意的是假如储存的数据的容量过大,数据库的性能会下降
Read more »

获取数据库连接

要素一:Driver接口实现类

Driver接口介绍

  • java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。

  • 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。

    • Oracle的驱动:oracle.jdbc.driver.OracleDriver
    • mySql的驱动: com.mysql.jdbc.Driver
Read more »