自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 字节流,字符流,高级流

一切文件数据(文本、图片、视频等)在存储时,都是使用二进制的形式保存都可以通过字节流进行数据传输字节流顶层抽象基类InputStream和OutputStreamInputStream是一个抽象类,是字节输入流的顶层抽象,所有的字节输入流的类都是其子类, 实现了Closeable接口,该接口中提供close方法,流使用结束后需要显性关闭1、打开流:new FileInputStream2、流读取:read3、关闭流文件输入流:FileInputStream:文件输入流,从源设备是文件是Inpu

2022-07-20 16:42:40 212 1

原创 mybatis接口绑定的方法

xml方法:1,创建接口:public interface studentmapper { public student selectstudentbyID(Integer id); public int updatestudentbyage(Integer id);}2,mapper.xml配置:<mapper namespace="mybatis.mapper.studentmapper"> <select id="selectstudentbyI

2022-05-10 10:20:48 303

原创 mybatis配置

相关配置:proproperties:该配置可以读取外部资源:这里的账户密码相关的数据就可以放在db.properties中proproperties的使用:1,专门在resources下设置一个配置文件:例如:db.propertiesdb.properties中的内容为:username=rootpassword=1234562,直接配置这些属性:(前提是db.properties已经创建好了) <properties resource="db.properties"&g

2022-05-10 10:20:04 270

原创 SpringIOC

IOC:1,简介:IOC(Inversion of Control 即控制反转)将对象交给容器管理谁控制了谁?是容器控制了对象控制什么?主要控制了外部资源及生命周期由容器帮我们查找并注入依赖的对象,对象只能被动的接收依赖对象,依赖对象的获取被反转了spring中提供了一种IOC容器,来控制对象的创建,无论是你创建对象,处理对象之间的依赖关系,对象的创建时间还是对象的创建数量,都是spring提供IOC容器上配置对象的信息就可以了2,作用:由IOC容器帮对象找相应的依赖思想并注入,并不

2022-05-09 22:15:01 91

原创 SpringAOP

SpringAOP简介:AOP(Aspect Oriented Programing)面向切面编程,通过预编译方式或者运行时动态代理方式实现程序功能的统一维护,可以理解为扩展功能而不用修改源代码普通的Java程序:Java程序的执行流:基于时间序列,我们可以将方法调用排成一条线。而每个方法调用则可以看成Java执行流中的一个节点。这个节点在AOP的术语中,被称为Join Point,即连接点。一个Java程序的运行的过程,就是若干个连接点连接起来依次执行的过程。通常面向对象的程序,代码都是按照时间序

2022-05-09 22:14:43 135

原创 SpringMVC

1、创建web项目通过maven来创建web项目,在项目路径下包含webapp包路径:2、引入SpringMVC依赖不仅需要引入SpringMVC的依赖,还需要引入Spring的四个核心依赖。 <!--spring核心依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-bea

2022-05-09 22:14:19 58

原创 JDBC介绍

JDBC:JDBC(Java Data Base Connection)Java中提供的一套操作数据库的API接口,用于java语言连接操作数据库常用的API插件:DriverManager:这个类是驱动管理类,管理一系列数据库驱动程序,用于简历和数据库的连连接Connection:该接口具有接触数据库所有的方法,表示和数据库通信的上下文对象Statement:该对象将SQL提交的数据库ResultSet:SQL查询语句的结果集通过resultSet返回给用户SQLException:该类是和

2022-05-08 14:59:36 65

原创 mybatis

JDBC编程存在问题:常见问题及解决方法:1、使用JDBC操作数据库前进行连接,操作完成后关闭连接,并发量大的情况下影响性能解决:连接池2、SQL语句硬编码在Java代码中,需求改变需要更改java代码本身解决:将SQL语句放在配置文件中(xml形式),需求发送给变只需要修改配置文件即可3、返回结果集存在硬编码将数据库中的数据集映射为Java对象mybatis框架介绍:中文网址:mybatis官网1、MyBatis 是一款优秀的持久层框架,前身是ibatis,apchche旗下的数据库

2022-05-08 14:58:52 242

原创 JVM的内存模型

JAVA的内存布局:分为五大块分别是:堆区,虚拟机栈、本地方法栈、方法区、程序计数器绿色为线程共享区域,红色为私有空间。程序计数器:程序计数器是一个较小的内存空间区域,是用来表示当前线程执行的字节码的行号指示器。由字节码解释器的工作时通过改变计数器的值来选择下一条要执行的字节码执行。对于分支、循环、异常等都需要依赖计数器来指定执行位置,该区域是线程独有的,每一个线程都有单独的计数器。线程私有空间作用:1、字节码解释器通过改变程序计数器来依次读取指定,从而实现代码的流程控制,如,顺序执行

2022-05-07 10:33:12 64

原创 JVM基础

1,JVM概念:JVM(Java Virtual Machine)即Java虚拟机1,JVM是Java的核心和基础,在java编译器和系统之间虚拟出来的机器,是利用软件方法实现了计算机下层的操作系统和硬件平台,可以在上面执行的java的字节码程序2,具有自己的硬件架构,比如处理器、堆栈以及指定系统,使用JVM的目的是Java能支持与操作系统无关可以跨平台的特征。2,JAVA跨平台性:Java源码带编译会生成字节码.class文件,JVM负责将字节码文件翻译成特定平台下的机器码进行执行,实现了”一

2022-05-07 10:32:24 243

原创 集合框架概述

集合框架图:集合框架图中虚线框中表示的是接口、实线框表示的是实现类通过框架图可知:Collection、MapCollection:该接口的实现类的集合中存储的元素都是单个数据map:该接口的实现类集合中存储的元素都是键值对存在:Key-value另:Collection底层接口存在子接口:分别是List、Set、QueueList接口:存储的数据是可以重复的、按照插入顺序存储Set接口:存储的元素是唯一的,不能重复的、数据是无序的Queue接口:数据是可以重复、可以排序java.uti

2022-05-07 10:31:17 112

原创 Redis

Redis介绍:Redis官网:http://www.redis.cn/Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串(strings), 散列(hashes),列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。Redis 内置了 复制(replication),LUA脚本

2022-05-04 16:43:00 219

原创 锁及其优化

乐观锁和悲观锁:悲观锁总是假设最坏的情况,每次在去获取共享数据的时候都认为别人会修改,所以每次都在获取数据的时候加锁。传统的关系型数据库里就用到很多这种锁,比如行锁,表锁、读锁、写锁等都是在操作之前先上锁,比如java中Synchronized关键字的实现也是悲观锁悲观锁存在的问题:在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延迟,引起性能问题一个线程持有锁会导致其他需要此锁的线程挂起乐观锁认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会对数据是否产生并发冲

2022-05-04 16:42:19 82

原创 MySQL之索引

索引底层结构MySQL支持两种索引:一种是基于B树索引、一种是基于哈希表索引,这两种索引的查询效率比较高MySQL中B树(B+树)的索引结构:B树特征大多数的存储引擎都支持B树索引,B树通常意味着所有的值按照顺序存储,并且每个叶子节点到根的距离相同,B树索引能够加快数据访问的速度。1、根节点至少包含两个孩子 。2、树中每个结点最多含有m个孩子(m >= 2)。3、除了根节点和叶结点外,其他每个结点至少含有ceil(m/2)个孩子,ceil为向上取整 。4、所有叶子结点位于同一层(高

2022-05-02 22:38:00 1438

原创 MySQL之事务

并发事务问题在多个事务并发运行时,会遇到操作相同的数据来完成各自任务,可能会存在以下问题:脏数据(Dirty READ)当一个事物正在访问数据并且对数据进行修改,而这个操作还没有提交到数据库中,这使另外一个事务也访问了这个数据,然后使用了该数据,因为数据还没有提交到数据库,那么另一个事务读到的这个数据就是脏数据,依据脏数据的所有操作是不正确的。示例:总结:A事务读取到B事务尚未提交的更改数据,并在这个脏数据的基础上进行操作,如果B事务进行回滚,A事务读取到的事务是不被承认的。不可重复读(Unr

2022-05-02 22:37:27 212

原创 Spring框架的深入

Spring Bean的实例化过程Spring管理对象,分为两部分:容器启动阶段Bean的实例化容器启动阶段配置元数据spring需要知道创建对象需要的必要信息,必要的信息可以是xml配置文件,或者是注解、也可以是直接代码硬编码,创建对象必须要的信息称之为配置元信息。 <bean id="student5" class="com.tulun.Spring.IOC.pojo.Student"> <property name="id" value="12"/&

2022-04-29 09:30:00 86

原创 mybatis高级映射

案例:用户表user:记录了购买商品的用户信息。订单表orders:记录了用户所创建的订单(购买商品的订单)订单明细表orderdetail:记录了订单的详细信息即购买商品的信息。商品表items:记录了商品信息。表与表之间的业务关系user和orders:(一对多关系)user->orders:一个用户可以创建多个订单,一对多。orders->user:一个订单只能由一个用户创建,一对一。orders和orderdetail:(一对多关系)orders->order

2022-04-29 07:45:00 624

原创 Mybatis的缓存机制

mybatis的代理详解Java中动态代理主要是JDK动态代理(接口),CGLib动态代理(类继承)在通过sqlSession.getMapper可以获取一个代理对象对于StudentMapper并没有显性的实现该接口的实现类,该对象是在运行时动态产生的,该对象就是动态代理对象JDK动态代理* 1、首先存在接口(StudentMapper.java)* 2、必须存在该接口的实现类(sqlSession.selectOne)* 3、实现invocationHandler辅助类* 4、通过P

2022-04-28 20:46:56 80

原创 mysql优化方案

MySQL优化方向:在设计上:存储引擎、字段类型、范式在功能上:索引、缓存、分库分表在架构上:集群、主从复制、读写分离、负载均衡Sql语句优化1、插入优化● 大量数据采用批量插入形式(每提交一个SQL插入语句客户端就要网络请求到服务端,需要进行连接-传输数据-断开连接等操作)● 事务设置手动提交,MySQL默认是自动提交,意味着每写一个SQL事务就自动提交,可能会频繁的设计事务开始和提交,所以建议手动提交。2、order by 优化Using filesort:通过表的索引或者全表扫描,读

2022-04-28 20:20:08 138

原创 Lock和ReentrankLock

Lock和ReentrankLockJDK1.5中提供了锁的接口:java.util.concrrent.locks.lock,提供了ReentrankLock,ReentrankReadWriteLock实现类Lock接口Lock接口提供了比Synchronized方法更加灵活的锁的操作接口,可以具有很大的属性,支持多个相关Condition对象(线程间通信,Object方法提供的wait、notify、notifyAll)Lock接口提供的方法操作:1,Lockvoid lock()

2022-04-21 22:04:28 234

原创 ConcurrentHashMap

在JDK1,4之前只有vector和HashTable是线程安全集合,在JDK 5之开始增加了安全的Map接口ConcurrentMap和线程安全的队列BlockingQueue通过继承关系图可知:ConcurrentHashMap是HashMap的安全版本ConcurrentMap:以键值对的方式存储数据public interface ConcurrentMap<K, V> extends Map<K, V> {实现自Map接口,及Map中所有的接口Concurr

2022-04-21 22:04:08 159

原创 BlockingQueue

对于Queue而言,blockingqueue是主要的线程安全的版本,具有则塞共色,可以允许添加、删除元素被阻塞,直到成功为止,blockingqueue相对于Queue而言增加了两个方法put/take元素BlockingQueue接口属于并发容器中的接口,在java.util.concurrent包路径下BlockingQueue不接受null元素,加入尝试通过add\put、offer等添加一个null元素时,某些实现上会抛出nullpointExeception问题。BlockingQue

2022-04-21 22:03:47 1106

原创 File类

File类File类主要作用是对文件和目录的抽象表示,该类主要是对目录和文件进行创建、修改、删除、过滤等造作常见方法创建与删除 File test = new File("/Users/gongdezhe/Desktop/IO/sql2.txt"); try { //public boolean createNewFile() throws IOException// // 创建新文件 当文件不存在时创建该文件并返回true,当文

2022-04-21 22:03:15 54

原创 线程池介绍:ThreadPoolExecutor

线程池介绍为什么要线程池多线程技术主要解决处理器单元内多个线程执行的问题,可以减少处理器单元的闲置时间,增加处理器单元吞吐能力,多线程的情况下确实可以最大限度发挥多核处理器的计算能能力,但是如果随意使用线程池,对系统性能反而不利● 创建和销毁线程是需要时间:假如一个服务器完成意向任务所需要的时间为:T1表示线程创建时间,T2表示线程执行任务时间,T3表示销毁时间,如果T1+T2远大于T2,那么会得不偿失● 线程也需要占用内存空闲,大量的线程会抢占宝贵的内存资源,可能会导致OOM的异常● 大量的线程

2022-04-21 22:02:36 241

原创 ThreadPoolExecutor任务提交

execute()是 java.util.concurrent.Executor接口中唯一的方法,JDK注释中的描述是“在未来的某一时刻执行命令command”,即向线程池中提交任务,在未来某个时刻执行,提交的任务必须实现Runnable接口,该提交方式不能获取返回值。下面是对execute()方法内部原理的分析,分析前先简单介绍线程池有哪些状态,在一系列执行过程中涉及线程池状态相关的判断。以下分析基于JDK 1.7线程池的执行流程1、如果线程池中的线程数量少于corePoolSize,就创建新的线程

2022-04-21 22:02:10 531

原创 ThreadPoolExecutor线程池终止

ThreadPoolExecutor线程池终止终止线程池主要有两个方法:shutdown() 和 shutdownNow()。shutdown()后线程池将变成shutdown状态,此时不接收新任务,但会处理完正在运行的 和 在阻塞队列中等待处理的任务。shutdownNow()后线程池将变成stop状态,此时不接收新任务,不再处理在阻塞队列中等待的任务,还会尝试中断正在处理中的工作线程。shutdown():温柔的终止线程池/** * 开始一个有序的关闭,在关闭中,之前提交的任务会被执

2022-04-21 22:01:43 6117

原创 网络知识概述

网络协议知识点:OSI参考模型TCP/IP协议族TCP协议:协议头部及各个字段的释义、三次握手及四次挥手、滑动窗口等UDP协议:协议头部字段释义网络层:IP协议及路由网络概述:计算机网络:通过传输介质、通信设施和网络通信协议,把分散在不同地点的额计算机设备互联起来,实现资源共享和数据传输的系统网络编程:编写程序代码将两个或者两个以上的设备进行数据传输OSI参考模型:将复杂的网络问题根据功能划分到不同层次上,层与层直接通过接口连接OSI(Open System Interconnecti

2022-04-21 22:01:03 51

原创 TCP和UDP

TCP协议:TCP(Transmission Control Protocol:传输控制协议),是面向连接的传输层协议,TCP层是位于IP层之上,应用层之下的中间层,不同的主机的应用层之间进程需要可靠的,向管道一样的连接,但是IP层不提供这种流机制,而提供的是不可靠的包交换TCP协议采用的是字节流传输数据TCP协议特点:1、面向连接:通信之前建立连接,通信结束断开连接2、每一条TCP连接只能是点对点的(一对一)3、提供了可靠的交付服务,通过TCP连接传输的数据,无差错,不丢失,不重复4、提供全

2022-04-21 22:00:29 455

原创 网络层:IP协议

网络层主要作用是实现终端节点之间的通信,也叫做点对点的通信IP大致分为三个模块:主要是IP寻址,路由,以及IP分包与组包概念IP地址在计算机通信中,为了识别通信对端,必须有一个类似于地址的识别码进行标识,在数据链路层的MAC地址正是用来标识同一个链路中不同计算机的一种识别码IP地址用于在连接的网络中所有的主机能识别出进行通信的目标地址,在TCP/Ip通信中所有的主机或者路由器必须设定自己的IP地址,不论一台主机与那种数据链路连接,其IP地址的形式是保持不变的IP报头格式版本号(4位):指IP的

2022-04-21 21:59:29 959

原创 Springboot整合mybatis

springboot项目创建:1,创建一个maven项目:2,在pom.xml引入相关依赖: <!--web的starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

2022-04-18 13:24:24 312

原创 线程间通信

通信方式:wait():调用一个对象的wait方法,会导致当前持有该对象锁的线程等待,直到该对象的另一个持有锁线程调用notify或者notifyAll方法进行唤醒notify():调用一个对象的notify方法,会导致当前持有该对象锁的所有线程中的某一个线程被唤醒notifyAll();调用一个对象的notifyAll方法,会导致当前持有该对象锁的所有线程同时被唤醒代码实例:wait线程:public class Wait213Demo extends Thread { //线程间通信

2022-01-19 22:20:19 163

原创 volatile和Synchronized

volatile关键字:使用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最新值使用场景:场景问题:统计1秒内count++的次数给定一个线程专门进行count++操作给定另一个线程睡眠1秒,通过两个线程共享变量来完成count++的暂停操作 private static boolean flag = true; public static void main(String[] args) throws IOException { Thre

2022-01-12 23:15:24 193

原创 并发相关知识

并发和并行的区别:并发是指多个线程操作同一个资源,不是同时执行,而是交替执行,单核CPU,时间片很短,速度很快,看起来是同时执行(张三、李四厨师,共用一口锅炒菜,交替炒菜)并行才是真正的同时执行,多核CPU,每个线程使用一个单独的CPU资源来运行(张三、李四厨师,一人一口锅,一起炒菜)并发作用可以最大化提高计算机的资源利用效率临界资源和临界区临界资源:一个时刻只能允许一个进程访问,一个进程正在使用的资源称之为临界资源临界区:是一种线程中访问临界资源的程序代码,注意:是程序代码,而不是内存资源或者

2022-01-11 23:08:12 164

原创 多线程介绍

线程介绍:线程和进程概念进程就是计算机正在执行的一个独立的应用程序,进程是一个动态的概念,必须是进行状态,如果一个应用程序没有启动,就不是进程线程是组成进程的基本单位,可以完成特定的功能,一个进程由一个或多个线程组成进程和线程的区别:1、内存空间的区别进程是有独立的内存空间,每个进程之间是相互独立的,互不干扰的,线程有共享的内存空间2、安全性进程是相互独立的,一个进程的奔溃不会影响到其他的进程线程是内存共享的,一个线程的奔溃可能会影响到其他的线程的执行,线程的安全性 不如进程关系:进程

2022-01-10 19:24:41 229

原创 JVM垃圾回收(GC操作)

GC原理:GC(Varbage Collection:垃圾回收):将堆内存中不在被使用的对象进行回收,GC中用于回收的方法称之为收集器。GC是需要消耗一些资源和时间,Java堆对象的生命周期特征进行分析,按照新生代、老年代的方式对对象进行回收,以尽可能虽短GC对应用造成的暂停● 对于新生代的对象的收集称之为minor GC/Young GC● 对老年代的对象的收集称之为Full GC● 程序中主动调用System.gc(),强制执行GC为Full GC不同的对象引用类型,GC会采用不同的方法进行回

2021-11-10 19:41:22 1681

原创 Junit测试

JunitJunit是用于编写和运行可重复的自动化测试的开源框架。适用范围:适用于测试整个对象,对象的一部分,交互中的一个方法或者是一些方法,对象之间的交互用法:1,添加Junit依赖: <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>

2021-11-04 18:55:58 80

原创 动态SQL

if标签:if标签通常是根据条件做判断,一般作为where子句的一部分if表达式判断是否传递参数在其后面有一个test属性,该属性必填,为true或false,为true时,会拼接该if中SQL片段,为false,则不拼接SQL子句该test的判断是通过OGNL表达式判断 <select id="select1" parameterType="mybatis.pojo.student" resultType="mybatis.pojo.student"> select

2021-11-04 18:53:35 106

原创 mysql

数据类型:1,整数类型:2,浮点类型:浮点数,和钱相关的计算,推荐使用decimal3,日期型范式:第一范式:保持原子性即指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性第二范式:非主属性完全依赖于主关键字即不能存在仅依赖主关键字一部分的属性。如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。第三范式:不存在传递依赖BC范式:每一个表中只有一个候选键BC范

2021-10-15 15:15:55 133

原创 List接口

List接口的实现类:1,ArrayList接口:底层基于数组实现,实现了长度可变的数组,其最大特点是内存空间连续,优点是遍历原宿和随机访问效率比较高;当输入第一个元素时,其底层会开辟一个内层地址为10的连续地址,当添加元素个数超过10是时候会以原内存地址的1.5倍进行扩容。常用方法:①add添加元素add(E e):末尾添加public boolean add(E e) { ensureCapacityInternal(size + 1); elementData[size++] = e;

2021-05-19 17:17:48 1993

原创 java集合

Set 接口总结特点:1,数据不允许有重复2,最多可存储一个null值主要提供的方法:add(E e):如果set中未存在指定元素,则添加此元素;addAll():如果set没有collection中的所有元素,则添加到此set中;clear():移除set中的所有元素;contains(Object o):如果set中含有该元素返回true,否则返回false;containsAll():如果set中含有collection中所有元素返回true,否则返回false;equals(

2021-05-19 17:17:36 67

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除