java核心技术笔记
java核心技术笔记
Botto__Mmmm
这个作者很懒,什么都没留下…
展开
-
Servlet 基础二
ServletContext 概述一个项目只有一个ServletContext对象可以在N多个Servlet中获取这个唯一对象,使用它可以给多个Servlet传递数据服务器会为每个应用 创建一个ServetContext 对象ServletContext 对象的创建是在服务器启动时完成ServletContext 对象的销毁是在服务器关闭时完成ServletContext 对象的作用是在整个Web应用的动态资源之间共享数据。如何获取ServletContextSe原创 2020-09-12 13:18:26 · 199 阅读 · 0 评论 -
Servlet 基础一
Servlet ,每个 Servlet都是唯一的,它们能处理的请求是不同的。Servlet是JavaWeb的三大组件之一,属于动态资源。作用是处理请求,服务器会把接收到的请求交给Servlet处理Servlet中通常要:1 接收请求数据 2 处理请求 3 完成响应Servlet 需要自己来编写,每个Servlet必须实现java.servlet.Servlet接口实现Servlet的方式1.实现 javax.servlet.Serlvet 接口继承 javax.servlet.Generi原创 2020-09-11 12:34:20 · 159 阅读 · 0 评论 -
数据库连接池
Java连接数据库时,需要构建连接,执行操作,最后释放连接。但是如果在执行操作上非常简便,那么构建连接和释放连接非常的损耗性能Connection是Java和数据库俩个平行系统的桥梁桥梁构建不易,成本很高,单次使用成本贵昂贵运用共享技术来实现数据库连接池(享元模式)– 降低系统中数据库连接Connection对象数量– 降低数据库服务器的连接响应消耗– 提高Connection获取的响应速度享元模式经典23个设计模式的一种,属于结构型模式一个系统存在大量相同的对象(由于这类对象的大量原创 2020-08-01 23:23:20 · 133 阅读 · 0 评论 -
JDBC 高级操作
事务数据库事务:Database Transaction作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全不执行事务,必须满足所谓的ACID(原子性,一致性,隔离性,持久性)事务是数据库运行中的逻辑工作单位,由DBMS中事务管理子系统负责事务的处理JDBC事务关闭自动提交,实现多语句同一事务connettion.setAutoCommit(false);connection.commit();提交事务connection.rollback();回滚事务保存点机制– co原创 2020-08-01 00:15:43 · 155 阅读 · 0 评论 -
数据库 和JDBC基本操作
数据库DB:Database存放数据的库数据:规范,半规范,不规范数据数据安全 重要DB(文件集合,类似.dox,.doxc文件),而操纵和管理数据库的软件,用来建立,使用,和维护数据库 叫做DBMS(Database Management System)DB种类文本文件/二进制文件xls文件(表格文件)AccessMysql(免费,多平台)SQL ServerOracle/DB2SQLite(手机使用)表数据库里面最基础的一个元素表:table– 列:列,属性,原创 2020-07-31 22:54:08 · 169 阅读 · 0 评论 -
Java 邮件 Mail编程
邮件使用Web 邮件管理界面邮件客户端软件(Outlook/Foxmail等)邮件客户端邮件服务端– 发送邮件服务器– 接收邮件服务器主要协议(发送端口25,接收端口110)邮件中继:通过别人的邮件服务器,将你的邮件系统的送到目标地址Java Mail程序通过Java Maik的API能够联系上邮件服务器,进行邮件的收发操作– 需要邮件服务器的支持,需要知道pop服务器和smtp服务器信息Java Mail工具包javax.mail包 和jzvzx.mail.inte原创 2020-07-30 22:53:23 · 398 阅读 · 0 评论 -
Java AIO 通讯编程
AIO通讯异步非阻塞的通讯方式,就是不需要等待一方的数据操作完成,会自动执行回调函数处理的读写操作主要类– AsynchronousServerSocketChannel 服务器接收请求通道bind 绑定在某一端口 accept 接收客户端请求– AsynchronousSocketChannel Socket 通讯通道read write– CompletionHandler 异步处理类completed 操作完成后异步调用方法 failed 操作失败后异步调用方法package原创 2020-07-27 20:30:45 · 176 阅读 · 0 评论 -
Java NIO 编程
BIO编程传统的TCP和UDP编程通讯:Blocking I/O一方在写入或读 数据时过慢,另一方需要等待NIO编程,同步非阻塞Non-Blocking I/O提供非阻塞通讯等方式避免同步I/O通讯效率过低一个线程可以管理多个连接减少线程多的压力JDK1.4引入,1.7升级为NIO2.0(包括AIO)主要在java.nio包中主要类– Buffer 缓冲区– Channel 通道– Selector 多路选择器Selector 在这里就选择的作用,哪一个数据通道有响应原创 2020-07-27 20:10:09 · 100 阅读 · 0 评论 -
基本数据类型及转型
基本数据类型1、整数型:byte (1字节) short(2字节) int(4字节) long(8字节)2、浮点型:float(4字节) double(8字节)3、字符型:char(2字节)4、布尔型:boolean(1字节)转型boolean类型不参与自动类型转换,把范围小的数据可以直接转为 范围大的数据例如: int a = 10; double b = a;强制类型转换,把范围大的数据 放到范围小的数据中,不用标记会报错double b = 10.1;int原创 2020-07-24 23:49:06 · 324 阅读 · 0 评论 -
Java HTTP编程
网页访问网页是特殊原创 2020-07-19 14:56:58 · 453 阅读 · 0 评论 -
JAVA 实现 UDP协议和TCP协议
UDP协议UDP(User Datagram Protocol)用户数据报协议,面向无连接协议不保证可靠的数据传输速度快,可在较差网络下使用计算机通讯:数据从一个IP的port出发,运输到另外一个IP的port上UDP:无连接无状态的通讯协议– 发送方发送消息,如果接收方刚好在目的地,就可以接受。如果不在,发送的消息就丢失了– 发送方也无法得知是否消息发送成功– UDP的好处就是简单,节省,经济JAVA中实现UDP协议DatagramSocket类:通讯的数据原创 2020-07-16 23:46:28 · 251 阅读 · 0 评论 -
Java多线程应用之定时任务执行
之前使用Thread/Executor/Fork-Join的多线程三种方式前一种是立刻执行的,后俩种是框架来进行调度,我们不了解,需要一种定时执行多线程的方式。定时执行固定某一个时间点一级运行以某一周期简单定时器机制– 设置计划任务,也就是在指定的时间开始执行某一任务– TimerTask 用来封装任务 ,也是继承与Runnable接口– Timer类 定时器public class TimerTest { public static void main(String[] arg原创 2020-07-12 00:36:59 · 2440 阅读 · 1 评论 -
Java并发协作控制之相关API
线程协作Thread/Executor/Fork-Join– 线程启动,运行,结束– 线程之前缺少协作synchronized 同步– 限定只能一个线程进入关键区– 简单粗暴,性能损失大LockLock实现同步的效果– 实现更复杂的临界区结构– tryLock方法可以预判锁是否空闲– 允许分离读写操作,多个读,一个写– 性能更好ReentrantLock 类,可重入的互斥锁ReentrantReadWriteLock 类,可重入的读写锁lock和unlock函数奶茶店原创 2020-07-11 23:57:20 · 109 阅读 · 0 评论 -
多线程中Thread中wait(),sleep(),join()方法
join()这里join用法,在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。如果写入参数,就是等待几毫秒。参数是0的话就是一直等待,知道唤醒,等价于没有参数。join的原理,看源码public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); l原创 2020-07-11 22:43:01 · 906 阅读 · 0 评论 -
Java 并发数据结构
并发数据结构常用的数据结构是线程不安全的– ArrayList,HashMap,HashSet 非同步的– 多个线程同时读写这些数据结构时,可能会抛出异常或者数据错误传统的Vector,Hashtable等同步的集合性能过差并发的数据结构:数据添加或者删除– 阻塞式集合:当集合为空或者满时,等待– 非阻塞式集合:放集合为空或者满时,不等待,返回null或异常ListVector 同步安全,写多读少ArrayList 不安全Collections.synchronizedList原创 2020-07-11 21:07:02 · 320 阅读 · 0 评论 -
Java 并发框架Executor 和Fork-Join
并行计算业务:任务多,数据量大串行,并行– 串行编程简单,并行编程困难– 单个计算核频率下降,计算核数增多,整体性能变高(需要选择并行)并行困难(任务分配和执行过程的高度耦合)– 如何分配粒度,切割任务– 如何分配任务给线程,监督线程执行过程并行模式– 主从模式(Master-Slave)(主线程指挥副线程)– Worker模式(Worker-Worker)(所有线程都是平等的)Java并发编程– Thread/Runnable/Thread组管理– Executor框架– F原创 2020-07-07 15:13:31 · 1354 阅读 · 0 评论 -
Java 多线程管理
细粒度:线程之间有同步操作等待通知/唤醒终止线程状态NEW 刚创建RUNNABLE 就绪态(strat)RUNNING 运行中(run)BLOCK 阻塞(sleep)TERMINATED 结束线程阻塞和唤醒– sleep,时间一到,会自己醒来– wait——notify/notifyAll,等待,需要别人唤醒– join,等待另外一个线程结束– interrupt,向另外一个线程发送中断信号,该线程受到信号,会触发InterruptedException(可解除阻塞),并原创 2020-07-05 21:25:12 · 145 阅读 · 0 评论 -
Java多线程信息共享
线程类通过继承Thread或实现Runnable通过start方法,调用run方法工作线程run结束后,线程退出粗粒度:子线程与子线程之间,和main线程之间缺乏交流细粒度:线程之间有信息交流通讯通过共享变量达到信息共享JDK原生库暂不支持发送消息...原创 2020-07-03 23:39:38 · 115 阅读 · 0 评论 -
Java 多进程简介和java实现多线程
多进程概念当前的操作系统都是多任务OS每个独立执行的任务就是一个进程OS将时间划分为多个时间片(时间很短)每个时间片内将CPU分配给某一任务,时间片结束,CPU自动回收,再分配给另外任务。从外部看,所有任务都是同时在执行,但在CPU上,任务是按照串行依次运行(单核CPU)。如果能多核,多个进程任务可以并行。但是在单核上,多进程只能串行执行。...原创 2020-07-02 01:42:20 · 990 阅读 · 0 评论 -
Java PDF文件简介和解析
PDFPortable Document Format 的简称,意为“便携式文档格式”Adobe公司方法PostScript,用以生成和输出图形,在任何打印机上都可以保证精准的的颜色和准确的打印效果字型嵌入系统,可使字型随文件一起传输结构化的存储系统,绑定元素和任何相关内容到单个文件,带有适当的数据压缩系统处理和第三方包常见功能处理– 解析PDF– 生成PDF(其他类型文件转化)第三方包– Apache PDFBox– iText(收费)– XDocReport(将docx转原创 2020-06-30 00:05:52 · 1410 阅读 · 0 评论 -
JAVA 表格文件简介和解析
表格文件xls/xlsx 文件(Microsoft Excel) 07及以后的是带x,以XML文件做标准的CSV文件(Comma-Seperated Values文件) 以逗号分隔的文本文件数据– sheet– 行– 列– 单元格解析,生成– 依赖于第三方包– POI,JXL– COM4J(Windows平台)– Aspose(收费)Apache POI处理Office等套件的(docx,xlsx,pptx,visio等)纯Java工具包,无需第三方依赖原创 2020-06-29 21:15:35 · 184 阅读 · 0 评论 -
Java Docx文件简介和解析
Docx简介以Microsoft Office的doc/docx 为主要处理对象Word2003和之前都是doc,文档格式不公开Word2007和之后都是docx,文档格式公开,遵循XML路线docx 为主要研究对象– 文字样式– 表格– 图片– 公式Java对docx文件操作常见功能– docx解析– docx生成(完全生成,模板加部分生成:套打)处理的第三方库– Jacob,COM4J (基于Windows平台)– POI, docx4j (纯Java的第三方库)原创 2020-06-29 13:11:28 · 2427 阅读 · 0 评论 -
JAVA 图形图像文件简介和解析
图形(Graph)– 矢量图,根据几何特征来画的,比如点,直线,弧线等– java.awt 包 没怎么普及,操作不友好。只有2D库中一些关键的方法保留下来– Java 2D库:Graphics2D,Line2D,Rectaangle2D(矩形),Ellipse2D(椭圆),Arc2D– Color(颜色),Stroke(线条)图像(Image)– 由像素点组成– 格式:jpg,png,bmp,svg,wmf,gif,tiff等– 颜色:RGB(Red,Green,Blue)– javax.原创 2020-06-29 00:17:28 · 387 阅读 · 0 评论 -
Java 条形码和二维码简介和解析
条形码(barcode)将宽度不等的多个黑条和空白,按照一定的编码规则和排列,用以表达一组信息和图形标识符通常代表一串数字/字母,每一位有特殊含义一般数据容量30个数字/字母专门机构管理:中国物品编码中心二维码,二维条形码用某种特定的几何图形按照一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息。比一维条形码能存更多信息,表示更多数据类型能够存储数字/字母/汉字/图片等信息字符集128个字符存储几百到几十KB的字符抗损坏JAVA里处理二维码文件依赖于第三方的库原创 2020-06-28 20:58:01 · 569 阅读 · 0 评论 -
Java JSON简介和解析
JSON概念JavaScript Object Natation,JS对象表示法是一种轻量级的数据交换格式类似于XML,更小,快,更易于解析最早用于Javascript中,容易解析,最后推广到全语言使用Javascript语法,但是独立于编程语言JSONJSON中有俩个定义JSONObject名称/值对,一个K-V对– JSON对象:{“name”:“shen”,“number”:“123123”}– 数据在键值对中– 数据由逗号分隔– 花括号保存对象JSONArray,J原创 2020-06-22 00:47:35 · 109 阅读 · 0 评论 -
Java XML文件解析 DOM/SAX/Stax
XML解析方法树结构方法:DOM(Document Object Model)文档对象模型,擅长小规模的读和写流结构SAX(Simple API for XML)流机制解释器(推模式),擅长读(大文件)Stax(The Streaming API for XML)流机制解释器(拉模式),擅长读(大文件),JDK 6 引入DOM方法DOM是W3C处理XML的标准API简单易用其处理方式是将整个XML 作为类似树结构的方式读入内存中以便于操作及解析,方便修改解析大数据量的XML文件,会原创 2020-06-22 00:00:00 · 166 阅读 · 0 评论 -
XML文件简介
XML基本概念单独的数据,它的含义很模糊。所以数据+含义,适用于传输数据,而不是显示数据(HTML)XML(eXtensible Markup Language),可扩展标记语言:意义+数据标签可自定义,具有自描述性纯文本文件,跨系统/平台/语言W3C标准(1998年,发布XML1.0,包括几乎所以的Unicode字符)XML结构常规语法任何的起始标签都必须要有一个结束标签简化写法,如果标签里面没有值,简写< name > < /name >可以写为<原创 2020-06-21 16:32:54 · 2230 阅读 · 0 评论 -
java正则表达式 和其他字符串操作
正则表达式规则表达式,计算机科学的一个基础概念用事先定义好的一些特点字符,及这些特点字符的组合,组成一个“规则字符串”作用– 测试字符串内的模式– 识别,替换文本–提取文本正则表达式独立于特点语言正则表达式的匹配模板– 定界符– 原子– 特殊功能字符(元字符)– 模式修正符Java的正则表达式java.util.regex包Pattern类, 正则表达式的编译表示– compile 编译一个正则表达式为Pattern对象– matcher 用Pat原创 2020-06-18 21:19:55 · 139 阅读 · 0 评论 -
Java国际化编程
国际化编程Internationalization 缩写为i18n多语言版本的软件一套软件,多个语言包根据语言设定,可以切换显示文本Java是第一个设计成支持国际化的编程语言java.util.ResourceBundle 用于加载一个语言_国家语言包java.util.Locaale 定义一个语言_国家java.text.MessageFormat 用于格式化带占位符的字符串java.text.NumberFormat 用于格式化数字、金额java.text.DateForm原创 2020-06-18 19:34:47 · 207 阅读 · 0 评论 -
JAVA字符编码
字符编码一.位:计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个“0”或一个“1”叫一位。二.字节字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位,8个二进制位组成1个字节。在ASCII码中,一个标准英文字母(不分大小写)占一个字节位置,一个标准汉字占二个字节位置。三.字符字符是指计算机中使用的文字和符号,比如“1、2、A、B、~ !·#¥%…*()+”等等。四.ASCII码American Standard Code f原创 2020-06-18 15:05:26 · 223 阅读 · 0 评论 -
构建工具Maven
MavenMaven是一个构建工具,自动下载中心仓库的jar文件,存在本地管理(m2文件夹),编译,测试,运行,和打包发布JAVA项目。构建工具功能自动帮程序员甄别和下载第三方库(jar)完成整个项目的编译(调用javac.exe)完成整个项目单元测试流程(调用JUnit工具)完成项目打包(jar/war格式,调用jar.exe)…Maven开发流程新建一个Maven项目,或者将JAVA项目转为Maven项目在中央仓库查找第三方jar的依赖文本拷贝依赖文本到项目的pom.xml文原创 2020-06-08 23:46:18 · 105 阅读 · 0 评论 -
软件测试 JUnit单元测试框架
软件测试在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否满足设计要求进行评估的过程测试分类单元测试(unit testing),是指对软件中最小可测试单元进行检查和验证。通常是一个函数或者方法单元测试是已知代码结构进行的测试,属于白盒测试。集成测试是将多个单元相互作用,形成一个整体,对整体协调性进行测试。一般从构成系统的最小单元开始,持续推进到单元之间的接口直到集成为一个完成的软件系统为止。白盒测试(white-box testing),全面了解程序内部的逻辑结构,对所原创 2020-06-08 23:33:14 · 435 阅读 · 0 评论 -
泛型的坑
前面做LeetCode上的题目,发现这样的错误incompatible types: ArrayList<ArrayList> cannot be converted to List<List> error: incompatible types: ArrayList<ArrayList<Integer>> cannot be converted to List<List<Integer>> return res;原创 2020-06-08 09:38:30 · 691 阅读 · 0 评论 -
Map 映射
Map 映射Map是一个以键值对存储的接口图来自作者 Snow、杨Map特点数据结构里面包含键值对一个键对应一个值键是唯一的,一个键对应的值也是唯一的java中的MapHashtable (同步,慢,数据量小)HashMap(不支持同步,快,数据量大)Properties(同步,文件形式,数据量小)HashtableK-V 对,K和V都不允许为null。同步,多线程安全无序的适合小数据量主要方法void clear()将此哈希表清空,使其不包含任何键。原创 2020-05-29 14:07:31 · 874 阅读 · 0 评论 -
集合 HashSet,TreeSet,LinkedHashSet
集合特点确定性:对任意对象都能判定其是否属于某一个集合互异性:集合内的每一个元素都是不一样的,内容也差异无序性:集合内的顺序无关Java内的集合接口HashSet(基于散列函数的集合,无序,不支持同步)TreeSet(基于树结构的集合,可排序的,不支持同步)LinkedHashSet(基于散列函数和双向链表的集合,可排序的,不支持同步)HashSet基于HashMap实现的,可以容纳null元素add 添加一个元素chear 清除整个HashSet里元素contains原创 2020-05-27 15:01:47 · 133 阅读 · 0 评论 -
java中参数的传递
形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。实际参数:在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”。值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。引用传递(pass by r...原创 2020-05-10 20:03:01 · 134 阅读 · 0 评论 -
java中的引用和C中的指针
首先我们来看下面这段代码:public class Test1 { String a = "123"; public static void change(Test1 test) { test.a="abc"; } public static void main(String[] args) { Test1 test1=n...转载 2020-05-10 20:02:36 · 295 阅读 · 0 评论