重学Java-Servlet 简明教程
引言本篇博文为 Servlet 技术的常见概念及相关细节梳理,意在重学 Java 查漏补缺。博文随时会进行更新,补充新的内容并修正错漏,该系列博文旨在帮助自己巩固扎实 Java 技能。毕竟万丈高楼,基础为重,借此督促自己时常温习回顾。
概念Servlet 是 JavaEE 规范之一(接口)
Servlet 是 JavaWeb 三大组件之一
Servlet 程序
Filter 过滤器
Listener 监听器
Servlet 是运行在服务器上的一个 Java 程序,它可以接收客户端发来的请求并响应数据给客户端
实现 Servlet 程序实现 Servlet 接口编写一个实现 Servlet 接口的类
实现 service 方法,处理请求并响应数据
web.xml 配置 Servlet 程序的访问地址
继承 HttpServlet编写类,继承 HttpServlet
重写 doGet 或 doPost 方法
web.xml 配置 Servlet 程序的访问地址
生命周期第一次访问,创建 Servlet 程序时创建
执行 Servlet 构造器方法
执行 init 初始化方法
...
重学Java-JUC
引言本篇博文为 JUC 技术的常见概念及相关细节梳理,意在重学 Java 查漏补缺。博文随时会进行更新,补充新的内容并修正错漏,该系列博文旨在帮助自己巩固扎实 Java 技能。毕竟万丈高楼,基础为重,借此督促自己时常温习回顾。
JUC在 Java 5.0 提供了 java.util.concurrent (JUC)增加了在并发编程中常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架
提供可调的、灵活的线程池
提供用于多线程上下文中的 Collection 实现
volatile 关键字与内存可见性内存可见性内存可见性(Memory Visibility)
当某个线程正在使用对象状态,而另一个线程在同时修改该状态,需要确保当一个线程修改了对象的状态后,其他线程能够看到发生的状态变化
内存可见性错误(内存可见性问题)
当读操作与写操作在不同的线程中执行时,无法确保执行读操作的线程能实时地看到其他线程写入的值
当多个线程操作共享数据时,彼此不可见
可以通过同步来保证对象被安全地发布
同步锁可解决该问题(效率低)
轻量级解决方案:v ...
重学Java-JDBC及数据库连接池
引言本篇博文为 JDBC 技术的常见概念及相关细节梳理,意在重学 Java 查漏补缺。博文随时会进行更新,补充新的内容并修正错漏,该系列博文旨在帮助自己巩固扎实 Java 技能。毕竟万丈高楼,基础为重,借此督促自己时常温习回顾。
JDBC数据的持久化:持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用
Java 中的数据存储技术
JDBC:直接访问数据库
JDO(Java Data Object) 技术
第三方 O/R 工具,如 Hibernate、Mybatis 等
JDBC 是 Java 访问数据库的基础,JDO、Hibernate、Mybatis 等只是更好的封装了 JDBC
JDBC 技术JDBC(Java Database Connectivity) 是一个独立于特定数据库管理系统、通用的 SQL 数据库存取和操作的公共接口,定义了用来访问数据库的标准 Java 类库(java.sql、javax.sql),使用这些类库可以以一种标准的方法方便地访问数据库资源
为访问不同的数据库提供了一种统一的途径
JDBC 体系结构
面向应用的 API:Ja ...
常用代码片段
前言总结一些常用的代码片段,一方面方便 CV,另一方面整理一些解决问题的小技巧
一、关于基础toArray() 方法常用的无参方法返回一个 Object[],通常不方便使用,这里可以使用它的重载方法 public <T> T[] toArray(T[] a)
ArrayList<Integer> arrayList = new ArrayList<>();Integer[] array = arrayList.toArray(new Integer[0]);
关于编程学习的思考
前言最近一直在学习 Java,简单说就仅仅是一门编程语言而已,但是作为一门高级语言它还是拥有很庞大的体系需要仔细研究。就论语言,私自认为语言仅仅是一种工具,无论是作为思想载体的自然语言还是作为软件实现的编程语言来说,我们学习语言的最终目的好像并不是为了研究语言本身,而是能够更好的运用语言,退一步来说,即使我们不能优雅的运用语言,但是用它来达成自己想要达成的目的才应该是它诞生的意义
一、编程需要学习吗私自认为编程不应该是一件需要学习的事情,更具体一点的描述是编程不应该成为一件专门费心费力去学习的事。因为广义上编程存在于生活中的方方面面,可以说它是生活中事物的抽象层面的体现。我们为什么要去学习那些我们习以为常的东西呢?说回高级语言,那不过是某一些人制定的某一些规则而已。如果可以,你甚至能够自己制定那些规则,然后通过自己制定的那些规则去实现同样想要实现的目的。这样来看,仿佛现有的有关于编程的技术都是可有可无的,但我想表达的并不是这个意思。现有的技术仅仅是一个过渡,是一个我们不得不选择接受的过渡,当它完成这一阶段,我们将迎来真正的编程自由。简单来说也就是只有到了那个时候,我们才不需要学习编程, ...
Java基础编程题解
引言一味地追求理解概念不如 Show Me The Code,本篇博文收集了网络上常见的 Java 基础阶段编程题目博文意在巩固基本概念,提高自己运用代码解决问题的能力以及帮助自己理解概念的深层内涵挑选一些比较有趣的题目及比较有启发的解法
显示当前时间/** 显示当前时间**/@Testpublic void showCurrentTime() { long totalMilliseconds = System.currentTimeMillis(); long totalSeconds = totalMilliseconds / 1000; long currentSecond = totalSeconds % 60; long totalMinutes = totalSeconds / 60; long currentMinute = totalMinutes % 60; long totalHours = totalMinutes / 60; long currentHour = (totalHours + 8) % 24; ...
重学Java-进阶(2/2)
引言【因内容较多,已拆分为两篇博文,此为篇二】本篇博文为 Java 的一些高级特性的常见概念及相关细节梳理,意在重学 Java 查漏补缺。博文随时会进行更新,补充新的内容并修正错漏,该系列博文旨在帮助自己巩固扎实 Java 基础。毕竟万丈高楼,基础为重,借此督促自己时常温习回顾。
集合集合、数组都是对多个数据进行存储(内存层面)操作的结构,即容器
数组在内存存储方面的特点:
数组初始化后长度确定
数组声明的类型就决定了进行元素初始化时的类型
数组在存储数据方面的弊端:
数组初始化后长度不可变,不便于拓展
数组中提供的属性和方法不便于进行添加、删除、插入等操作,且效率不高无法直接获取已存储元素的个数
数组存储的数据是有序(存入顺序)的、可重复的 —— 存储数据的特点单一
集合类可用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组
Java 集合可分为 Collection 和 Map 两种体系:
Collection 接口:单列数据,定义了存取一组对象的方法的集合
List:元素有序、可重复的集合
ArrayList、LinkedList、Vector
Set: ...
重学Java-进阶(1/2)
引言【因内容较多,将拆分为两篇博文,此为篇一】本篇博文为 Java 的一些高级特性的常见概念及相关细节梳理,意在重学 Java 查漏补缺。博文随时会进行更新,补充新的内容并修正错漏,该系列博文旨在帮助自己巩固扎实 Java 基础。毕竟万丈高楼,基础为重,借此督促自己时常温习回顾。
多线程概念程序、进程、线程程序(Program):为完成特定任务,使用某种编程语言编写的一组指令的集合。即指一段静态的代码,静态对象
进程(Process):指程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程 —— 生命周期
如:运行中的 Edge 浏览器、Chrome 浏览器
程序是静态的,进程是动态的
进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域
线程(Thread):进程可进一步细化为线程,是一个程序内部的一条执行路径
若一个进程同一时间并行执行多个线程,就是支持多线程的
线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小
一个进程中的多个线程共享相同的内存单元/内存地址空间(它们从同一堆中分 ...
重学Java-异常处理
引言本篇博文为 Java 异常处理的常见概念及相关细节梳理,意在重学 Java 查漏补缺。博文随时会进行更新,补充新的内容并修正错漏,该系列博文旨在帮助自己巩固扎实 Java 基础。毕竟万丈高楼,基础为重,借此督促自己时常温习回顾。
异常概述异常:在 Java 语言中,将程序执行中发生的不正常情况称为 “异常”。(开发过程中的语法错误和逻辑错误不是异常)
Java 程序在执行过程中所发生的异常事件可分为两类:
Error:Java 虚拟机无法解决的严重问题。
如:JVM 系统内部错误、资源耗尽等严重情况。
比如:StackOverflowError(栈溢出) 和 OOM(OutOfMemoryError 堆溢出)
一般不编写针对性的代码进行处理
Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理,例如:
空指针访问
试图读取不存在的文件
网络连接中断
数组下标(索引)越界
对于这些错误,一般有两种解决方法:
遇到错误就终止程序的运行
在编写程序时,考虑到错误的检测、错误消息的提示以及错误的处理
异常分类捕获错误最理想的是在编 ...
重学Java-面向对象
Java 面向对象三大主线Java 类及类的成员属性、方法、构造器、内部类
面向对象的三大特性封装(Encapsulation)、继承(Inheriance)、多态(Polymorphism)、(抽象)
其他关键字this、super、static、final、abstract、interface、package、import
面向过程(POP)与面向对象(OOP)面向过程:POP - Procedure Oriented Programming面向对象:OOP - Object Oriented Programming二者都是一种思想,面向对象是相对于面向过程而言的。
面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做
面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做
面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等
面向对象分析方法分析问题的思路和步骤
根据问题需要,选择问题所针对的现实世界中的实体
从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类
把抽象的实体用计 ...