- 博客(34)
- 资源 (1)
- 收藏
- 关注
原创 Java多线程
线程和进程什么是线程和进程进程是程序的一次执行过程,线程是程序更小的执行单位,一个进程执行中可以产生多个线程,不同进程之间很难数据共享,但不同线程之间比较容易共享,进程之间不会互相影响,但是一个线程挂掉会影响整个进程在Java里启动main函数时就是启动了一个JVM进程,main函数所在的线程就是主线程,一个Java程序的运行时main线程和其他多个线程同时运行并发和并行的区别并发:在某一时间段多个任务交替进行(吃饭时停下来打电话),单核cpu执行多任务就是并发并行:某一时刻多个任务同时进行(边
2021-04-21 23:41:57
153
原创 ssm项目整合(非maven)
创建项目#Tomcat配置导入jar包在WEB-INF下新建lib文件夹,将所需的如下jar包导入导入依赖新建目录在src下新建四个文件夹在项目目录新建resource在resource下建立如下目录在src下新建log4j.properties,粘贴如下代码log4j.rootLogger=DEBUG,Consolelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console
2021-03-23 11:40:34
434
原创 mybatis项目搭建复习
主要是自己总是记不住,写下来以备复习以博客表逻辑为例create table blog( blog_id int, blog_title varchar(30), blog_author_id int);create table post( post_id int, post_subject varchar(30), post_body varchar(30), blog_id int);create table author(
2021-02-19 22:43:07
188
原创 Java面试之线程安全的定义以及实现
线程安全是并发编程很重要的概念,那么什么是线程安全呢?线程安全其实并不是指线程是否是安全的,线程本身是没有思想的,它是由我们的业务逻辑来决定它的行为的。《Java并发编程实践》和《深入了解Java虚拟机》的作者认为线程安全的主体是对象,也就是说我们可以说hashtable是线程安全的,hashmap是线程不安全的。但是线程安全的定义并不是统一的,也有一些定义描述认为线程安全的主题是一段代码或者一个方法,也就是我们也可以说同步方法或同步代码块中的线程是安全的。其实这两种说法都没有问题,为什么这样说呢?我们来
2021-02-12 19:31:41
434
5
原创 Java面试之缓存一致性协议MESI
MESI是四个单词的缩写:Modifield,Exclusive,Shared,Invalid代表缓存的四种状态首先来了解缓存:缓存:为了弥补内存和处理器之间处理速度不匹配的问题我们的数据和程序都是存储到内存中的,在执行时加载到处理器中,因为处理器的处理速度非常快,导致内存中数据的加载赶不上处理器处理的速度,从而cpu需要等待内存处理数据,内存是一种使用DRAM的动态随机存储器,缓存是放在cpu内部的使用称之为SRAM的静态随机存储器,缓存的处理速度非常快,可以比肩cpu的处理速度,这个存储器称为高速
2021-02-07 13:22:54
481
原创 Java面试之BIO,NIO和AIO的区别(基本)
首先来看这三种IO模型Java BIO同步阻塞式,每当有一个客户端向服务器发起请求时,服务器都要启动一个线程,如图同步:无论客户端是否响应,线程都必须一直等待可见当有多个客户端发出请求时,服务器需要启动等量的线程,而且当客户端没有响应时,线程也必须一直等待,长期下来需要大量的线程且线程利用率低,会造成浪费Java NIO同步非阻塞,服务器用一个线程来处理多个请求,客户端发送的请求会注册到多路复用器(selector选择器)上,有I/O请求的客户端分配线程处理Java AIO异步非阻塞客
2021-02-05 22:49:41
6362
3
原创 jsp+servlet实现文件上传
看了好多资料感觉多少都不太对,这个是实践过确实没有问题的准备:导入jar包(这里演示的是1.2版本,可以上maven官网下载)commons-fileupload-1.4.jarcommons-io-2.8.0.jar在项目中导入这两个包(步骤很简单,此处省略)点击红色标记处即可下载index.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head&g
2021-01-27 15:20:44
205
原创 Java面试之经典垃圾回收器全解析/Serial/ParNew/Parallel Scavenge/CMS
Java面试之HotSpot垃圾分代回收算法Serial:是JDK1.3版本以前提供的唯一的垃圾回收器Serial的意义是串行的,意味着它只能单线程工作,串行不仅要求它是在一个cpu中的一个线程中执行的,它也要求了其他线程在它进行时必须停止,也就是它要求整个系统的工作方式在收集的时候是串行的,即在垃圾收集时,只允许单个垃圾回收线程执行其他所有用户线程都得停下来,知道收集线程结束,这中间的GC线程叫做STW(stop the world),serial收集器可以打扫新生代,它新生代采用了复制算法,它也可以
2021-01-20 23:02:29
274
原创 Java面试之HotSpot垃圾分代回收算法
JVM垃圾回收机制HotSpot的垃圾回收算法堆内存分为新生代和老年代两大区域,根据每代的不同采用最合适的垃圾回收算法默认情况下新生代占整个堆的1/3,老年代占2/3新生代的特点:绝大多数对象在新生代中被创建,这里的垃圾回收机制非常频繁,且速度很快,每次新生代的垃圾回收之后,通常只有少量对象可以存活,所以新生代通常采用复制算法,即只把少量的存活对象复制走就可以把当前内存区域一下子清空来实现垃圾回收,由于存活的数量比较少,所花成本很低复制算法的操作:新生代内部通常分为三个区:一个Eden区,两个su
2021-01-18 23:31:39
260
原创 用栈计算中缀表达式(Java实现)
(数字只能是一位)思路:先定义两个栈,一个栈存放操作数,另一个栈存放操作符号遍历表达式如果是数字,就直接入数字栈如果是一个符号,分如下情况:1.如果当前的符号栈为空,就直接入栈2.如果符号栈中有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop中取出两个数,再从符号栈中pop中取出一个数,进行运算,将得到的结果入数栈,然后将当前的操作符入符号栈3.如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈当表达式扫描完毕后,就顺序的从数栈和符号栈中华会
2021-01-18 21:06:40
249
原创 Java数据结构复习之链表模拟栈
只是自己的理解,有不对的地方欢迎指出/** * 链表模拟栈 * */public class LinkedListStack{ static class Node { private int value; private Node next; public Node(int value) { this.value = value; } public int g
2021-01-18 15:39:05
124
原创 JVM垃圾回收机制
Java开发不需要过多关注对象的回收和释放,因为JVM中的垃圾回收机制可以帮助我们自动对内存中已经死亡或长时间没有使用的对象进行清除和回收,来实现内存空间进行有效利用。但是完全交由JVM来回收对象,就会增加回收性能的不确定性,所以面对特定业务场景就需要人为介入来实现垃圾回收的调优,比如说对内存要求苛刻的情况下,需要提高对象的回收率,cpu使用率高的情况下就需要降低并发时垃圾回收的频率垃圾回收机制一.垃圾回收发生在哪里在JVM的区域中,主要有五个区域构成线程共享:方法区和堆方法区:主要回收废弃的常
2021-01-08 22:29:59
148
原创 单链表反转(Java)
反正就想了很久原链表第一步新建一个头结点head1第二步:将1指向head1三:将2指向头结点head1以此类推,最后head.next=head1.next实现代码public class Reverse{ static class A { public int num; public A next; public A(int num) { this.num = num;
2021-01-08 13:59:57
155
原创 filter过滤器
作用对经过特定的servlet的请求和相应进行统一处理,加以约束注意:这里特定的servlet就是filter配置的url-pattern,当该Servlet的url-pattern被包含于filter的servlet之前,要先进入filter如果有多个对同一个servlet进行过滤的filter,那么filter的执行顺序是根据限定范围从大到小的filter执行过滤器使用场景1.编码格式的统一处理2.权限校验3.session管理声明周期服务器启动时,过滤器被初始化,服务器关闭时,fi
2021-01-05 22:18:58
343
1
原创 session,cookie和servletcontext
文章目录ServletContext特性:共享数据ServletContextweb容器启动时,会为每个web程序创建一个对应的ServletContext对象,代表了当前的web应用web容器:是一种服务程序,在服务器每个端口就有一个提供相应服务的程序,如tomcat特性:共享数据每个Servlet都有独立的URL,它们的数据都存放在ServletContext中,无论是A还是B存储的数据都可以相互使用...
2021-01-02 20:08:13
484
原创 TCP三次握手四次挥手
文章目录TCP连接的建立和释放(三次握手和四次挥手)TCP序列号确认号3个重点标志位ACKSYNFIN三次握手第一次握手第二次握手第三次握手四次挥手第一次挥手第二次挥手第三次挥手第四次挥手TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报TCP连接的建立和释放(三次握手和四次挥手)TCP序列号TCP传送的数据流中每个字节都有一个序号,序号字段代表报文段要发送的数据的第一个字节的序号确认号通讯的任何一方在收到对方的一个报文后,都要发送一个相对应的确认报文,来表示确认收到,确认报文包
2020-12-29 20:55:43
425
原创 servlet乱码问题解决
req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8")找到tomcat安装目录下conf的server.xml找到connector标签,添加URIEncoding=“UTF-8”<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ...
2020-12-27 21:06:17
178
原创 jdbc+mysql+tomcat+servlet实现用户登录
两个月以前看的,现在已经忘得差不多了,把复习到的写下来防止遗忘.文章目录新建工程配置tomcat导入jar包Mysql建用户表(以最简单的为例)新建包util包(工具包)DBUtil类bean包(存放来自数据库中的数据)User类dao包(对数据库进行增删改查操作)工具:IntelliJ IDEA ,mysql-workbench,tomcat(mysql,tomcat安装过程省略)准备的jar包:mysql-connector-java-5.1.39.jar链接:https://pan.baid
2020-12-27 18:25:20
564
1
原创 MySQL数据库笔记(未完)
windows服务MySQL启动:net start [服务名]net start MySQL57MySQL57 服务正在启动 .MySQL57 服务已经启动成功。MySQL停止:net stop [服务名]net stop MySQL57MySQL57 服务正在停止.MySQL57 服务已成功停止。连接服务器mysql -u[用户名] -p[密码] -P[端口号]端口号默认3306mysql -uroot -p123456mysql: [Warning] Usin
2020-09-11 20:28:51
183
原创 反射
反射概念:在运行状态时,任何一个类都能知道它全部的属性和方法,并且能够调用对象的任意一个方法获取class对象的方式获取class对象的方式类名.classpublic class A{ public static void main(String[] args) { Class aclass = Person.class; }}class Person{}对象名的class方法public class A{ pub
2020-09-08 10:33:32
154
原创 Java注解
注解(annotations)预定义注解@Override: 加在方法上修饰方法,判断其是否是重写方法@Deparcated:表示该方法已弃用,与javadoc里的@deprecated功能类似(但不如@deprecated,@Deparcated不支持参数)@SupressWarnings:压制警告参数关键字用途1deprecation使用废弃的类或方法时的警告2unchecked使用了未转换类型的警告,如集合未使用泛型来指定使用保存的类型3fa
2020-08-19 19:07:53
311
原创 Java集合框架(未完)
Collection方法import java.util.ArrayList;import java.util.Collection;import java.util.Date;public class A{ public static void main(String[] args) { Collection collection = new ArrayList(); Collection collection1 = new ArrayLi
2020-08-15 19:02:52
184
原创 Java线程
进程:进程就是正在运行的程序,程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成一个活动的实体,我们称之为进程,比如在Windows系统中,一个运行的.exe就是进程线程:进程中的一个执行任务,负责当前进程中程序的执行,一个进程至少有一个线程,一个进程可以运行多个线程,多个线程共享数据。发起线程的两种方式:创建一个类继承自Thread,重写run方法,调用该类时使用start方法public class A{ public static void main(String[]
2020-08-09 18:46:48
152
原创 内部类
内部类的定义:一个类里嵌套另一个类,外面的类叫做外部类,被嵌套的类叫做内部类作用:(1)内部类可以更好地封装,隐藏。内部类可以被private,protected修饰(非内部类一般不允许),可以隐藏信息(2)内部类虽然和外部类写在同一个文件中,但编译后生成各自的.class文件,内部类通过this访问外部类的成员(3)文章目录内部类成员内部类静态内部类局部内部类匿名内部类内部类成员内部类public class A1{ class B { }}注意事项:成
2020-08-08 21:33:54
295
原创 try-with-resources
try-with-resourcesJDK7新增的处理方式,是为资源关闭设置的语法try(需要关闭的资源对象(任何实现java.lang.AutoClosable或java.io.Closable的对象)){可能发生异常的逻辑代码}catch(异常类型 e){异常处理代码}catch(异常类型 e){异常处理代码}关闭资源和final的执行顺序:在try-with-resource语句中,任何catch或finally块在声明的资源关闭后运行Java中需要调用close()方法
2020-08-06 17:26:25
170
原创 I/O File
java.io.file类File类:计算机上的文件或文件夹构造方法:方法public class A{ public static void main(String[] args) { File file1 = new File(""); File file2 = new File("/"); System.out.println(file1.getAbsolutePath()); System.out.
2020-08-04 11:11:11
163
原创 异常处理(一)
捕获处理try catch finallytry{//用于包裹可能发生异常的代码,其后面必须跟catch或finally}catch(数据类型 变量名)//可能有多个{//用于捕获某种try中引发的异常,并且执行引发此异常的代码}finally{//必须执行的代码部分}异常和错误的区别异常:程序在各种复杂甚至是极端过程中产生的不正常的情况处理方式:异常处理错误:程序编写时存在硬伤,导致问题不解决将无法正常执行处理方式:修改代码...
2020-08-01 17:51:20
294
原创 时间日期API复习
Day5千年虫问题(时间是在一个段内循环的)JDK8前java.util.Date(注意区分java.sql.Date)构造方法未弃用的方法java.util.Datebeforeafterjava.text.SimpleDateFormatSimpleDateFormat(String pattern) y:年 M:月 d:日 H:时 m:分 s:秒.format(Date):把对象转化成字符串,parse(String):把字符串转化成对象import java.text
2020-07-28 17:19:24
183
原创 字符串复习(二)
字符串依赖的3个类1.CharSequence(接口):常用的类:String,StringBuilder,StringBuffer关系图如下所示java.lang.System:
2020-07-25 20:20:12
110
原创 字符串复习(一)
Java中的数据类型基本数据类型(8种)byte,short,int,long,float,double,char引用类型class类型,interface类型,Array类型String不是基本的数据类型,是final修饰的java类,是引用类型。==和.equals的区别==:public class A { public static void main(String[] args) { Scanner input = new Scanner(System.i
2020-07-23 11:04:15
191
原创 面向对象复习(2)
Day2(内部类和泛型之后会有)抽象类abstract1.抽象类无法实例化(1.语法要求 2.没有意义)2.抽象类可以包含抽象方法抽象方法:1.不提供方法的实现(没有方法体)2.所有的子类,都必须重写抽象方法抽象类存在的意义:完全是为了当成父类使用抽象类的特点:1.除了不能实例化对象外,其他功能依然存在,成员变量,成员方法和构造方法的访问方式和普通类一样2.由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用,所以,通常在设计阶段决定要不要设计抽象类3.父类包含类集合的常见方法,
2020-07-22 10:30:38
156
原创 面向对象复习(1)
Day1引用类型间的数据类型转换1.两个不相干的类型无法转换2.子类转父类Java允许把一个子类对象直接赋值给一个父类引用变量,无需任何类型转换,或者被称为向上转型,由系统自动完成3.父类保存的对象转子类(强转)编译期类型与运行期类型Java的许多对象运行时会出现两种类型:编译期类型和运行期类型例:Animal animal = new cat();编译期类型Person,运行期类型cat总结:编译期类型由声明该变量时使用的类型决定运行时类型由实际赋给该变量的对象决定注:如果编译
2020-07-21 16:53:48
275
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅