自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Harbor

Harbor

  • 博客(40)
  • 收藏
  • 关注

原创 图解OSI七层模型

2020-10-19 20:10:01 122

原创 JVM知识整理

JVM的主要组成部分JVM包含两个两个子系统(类加载子系统和执行引擎)和两个组件(运行时数据区与和本地库接口)类加载子系统:根据给定的全限定类名来装在class文件到运行时数据区域中的方法区。执行引擎:执行classes中的指令。本地接口:和本地方法库进行交互,是其他编程语言交互的接口。运行时数据区域:JVM内存。从JVM的角度看,一个程序的功能怎么实现?首先通过编译器将编写的Java代码(.java)转换成字节码(.class)。类加载器再把字节码加载到内存中,将其放在运行时数

2020-09-23 14:46:19 346

原创 MySQL表中datetime列的时间与系统时间差八个小时的解决方案

如题,今天在进行插入操作的时候,发现数据库表中,数据类型为datetime列的时间与系统总是差8个小时,搞了半天,最后发现其实是我们的JDBC的url连接没有配置好。之前的配置:jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT修改后的,在GMT后面加上%2B8:jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8然后再进行插入,时间就ok了。...

2020-08-03 19:50:08 1047

原创 设计模式(一):单例模式

一、单例模式简介单例模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。我们用静态类直接调用方法跟单例模式差不多,区别就是静态类直接调用是一种基于对象的思想,而单例模式则是一种面向对象的思想概括意思就是:单例类只能有一个实例必须自己创建自己的唯一实例必须给其他对象提供这一实例二、单例模式代码示例单例模式的编写其实就是遵循三点:将

2020-07-19 11:17:08 101

原创 深入理解Java并发编程(四):CAS操作以及jdk1.8后的优化

一、前言说到CAS之前,先来看看乐观锁与悲观锁:悲观锁认为:每个线程在对一数据进行操作时,都会有其他线程来并发修改,所以在获取数据的时候就上锁来进行操作,synchronized和lock就是一种悲观锁的策略。也就是先上锁再操作。乐观锁认为:每个线程在对以数据进行操作时,没有其他线程来并发修改,这样就其实是所有线程都去读取共享区的数据,然后在本地工作内存操作,最后看共享区的数据有无被其他线程更新。如果没有则将修改后的数据写入,如果有的话就根据具体实现具体分析(报错或者自动重试)。即直接操作我们不难得

2020-07-12 16:21:27 558

原创 深入理解Java并发编程(三):volatile关键字详解

一、volatile关键字简介synchronized关键字是阻塞式同步,在线程竞争激烈的时候会逐渐由偏向锁膨胀为重量级锁。而volatile是JVM提供的最轻量级的同步机制。JMM告诉我们各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。不过线程在工作内存中进行操作后将会何时写入主内存中?这个时机普通机制是没有规定的。volatile一般用于修饰会被不同线程访问和修改的变量,而针对volatile修饰的变量给JVM给了规定:线程对volatile变量的修改会

2020-07-12 11:01:58 210

原创 深入理解Java并发编程(二):synchronized关键字详解

前言:如何处理共享数据的安全问题?让每一个线程依次的去读取这个共享数据,这样就不会有任何的数据安全问题了,因为每次每个线程所操作的都是最新的数据,不会出现脏读的现象。synchronized关键字就是使每个线程依次排队操作共享变量,也就是用来处理共享数据的安全性问题。不过这种同步机制的效率很低。一、使用范围在Java代码中,synchronized关键字可以用在代码块和方法中:方法: 1.实例方法:被锁的是该类的实例对象 public synchronized void method() {

2020-07-12 10:07:09 154

原创 深入理解Java并发编程(一):JMM(Java内存模型)详解

一、JMM是什么?JMM是一个抽象的概念:描述的是一组围绕原子性、有序性、可见性的规范。定义程序中各个变量的访问规则,即虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量是共享变量。JMM规定:所有共享变量存储在主内存中,每条线程有自己的工作内存,线程的工作内存保存了被该线程使用到的变量的主内存副本,线程对变量的所有操作都必须在工作内存上进行,线程不能直接读写主内存的共享变量。不同的线程之间也无法访问对方工作内存中的变量,线程间的变量值的传递均需通过主内存来完成。共享变量:所有实

2020-06-24 12:00:54 410

原创 Java异常处理中对于finally的一些思考

一、前言因为这次面试有问到一些同学finally,发现自己这块好像有点记不太清楚了,有的点还说错了,一度弄得场面有些尴尬。所以说这篇文章深入研究一下finally的执行情况和返回值的情况。二、finally一定会执行吗?先给答案:肯定不是。我们可以看两种情况:1.在执行try块之前直接return,我们发现finally块是不会执行的public class TryCatchTest { private static int total() { int i = 11; if (i =

2020-05-18 22:14:07 911 5

原创 集合源码阅读(三):基于jdk12的LinkedList源码分析

一、前言LinkedList是Java集合框架中一个重要的实现,底层采用双向链表结构。和ArrayList一样,其也支持null值和重复值。它基于双向链表实现,就不用扩容了,可这也就是说,在维护结点的时候需要额外的空间存储前驱和后继的引用。在链表头部和尾部插入效率比较高,但是在指定位置插入就不太行了,原因是定位需要O(N)的时间复杂度,这也就是说查找的效率也不太行。最后,他是非线程安全集合类。这篇文章会写一些LinkedList底层重要的方法。二、源码阅读部分1.声明部分:public class

2020-05-16 17:44:16 145

原创 数据结构与算法(一):有关二叉树遍历的一些算法问题(前中后序、层次遍历)

一、前言学习二叉树也有一段时间了,但一直没有系统的整理一些最基础的算法问题,这篇文章就当是个总结吧。二叉树的数据结构相信大家已经烂熟于心了,在此不多说了,直接上代码。二、先从递归说起二叉树最明显的特征就是递归结构,很多关于二叉树的算法题都与递归扯不开关系。1.递归前中后序遍历二叉树:private List<Integer> inorderTraversal(TreeNode root) { //我们用一list来存储结果 List<Integer> res

2020-05-11 11:28:03 187

原创 集合源码阅读(二):基于jdk12的ArrayList源码阅读分析

一、前言ArrayList是Java集合框架中List接口的一个实现类,底层用数组实现,相当于动态数组。是一种随机访问模式,实现RandomAccess接口,因此查找十分的块。ArrayList是线程不安全的,Vector是线程安全的,但是Vector比较古老,一般不建议使用。ArrayList特点:基于数组实现的List类。动态的调整容量。有序的(输入输出顺序一致)。元素可以为nu...

2020-04-30 13:18:51 251

原创 集合源码阅读(一):基于jdk1.8的HashMap源码阅读分析

一、前言在jdk1.8以前,HashMap采用数组+链表实现,采用拉链法来解决hash冲突,即创建一个链表数组,数组中每一格就是一个链表,遇到hash冲突直接将冲突的值塞进链表里即可,这样同一hash值的都存储在一个链表里。这么做有个缺点就是如果同一hash值元素较多时,查找效率低下。在jdk1.8中为了解决hash冲突频繁的问题,HashMap采用了数组+链表+红黑树实现,当链表的长度超过阈...

2020-04-21 16:58:33 155

原创 SSM学习(二):查询列表分页

我们要想实现分页,就必须得现有一个Page的工具类,用来存放我们的分页信息:public class Page { private int start = 0; //count为11表明一页显示11条数据 private int count = 11; private int last = 0; public int getStart() { ...

2020-02-26 12:17:22 301

原创 SSM学习(一):基础搭建

前言学习SSM有一段时间了,今天来把他们三个整合一下。整和就是把SpringMVC和MyBatis都交给Spring来管理。一、环境的准备我们使用IDEA,首先创建一个Maven项目,然后在pom.xml中导入相关坐标 <dependency> <groupId>junit</groupId> <artifactId&...

2020-02-24 16:12:48 253

原创 Git的简单介绍以及一些基础操作

0

2020-02-23 14:59:49 110

原创 SpringMVC学习(二):简单表单处理

一般在实际开发中,我们离不开与表单打交道,所以在此来说一下SpringMVC如何处理表单。我们新建一个包,然后在下面创建两个类,User的pojo类和UserControllerUser:package com.hty.userbiaodan;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArg...

2020-02-12 17:14:22 347

原创 SpringMVC学习(一):入门操作

什么是SpringMVC?SpringMVC:是一个模型-试图-控制器(MVC)的Web框架,他提供了MVC架构和用于开发灵活和松散耦合的Web应用程序的组件,MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离。模型(Model):封装了应用程序数据,一般由POJO类组成视图(View):负责渲染模型数据,一般来说它生产客户端浏览器可以解释HTML输出控制器(Contr...

2020-02-12 16:50:18 104

原创 利用Maven来创建Java项目

0

2020-02-12 16:04:19 142

原创 Mybatis学习(一)基础操作CRUD

前言:什么是框架?使用框架有什么好处?框架就是我们软件开发中的一种解决方案,不同的框架对应解决不同的问题。框架封装了很多细节,使开发者可以使用极简的方式去实现功能,大大的提升了开发效率。现在学习的Mybatis是三层架构(表现层,业务层,持久层)中持久层相关的。对于持久层来说,有以下几种解决方案:JDBC技术:Connection,Statement,ResultSetSpring的...

2020-01-21 13:26:31 131

原创 二分查找算法相关算法题合集

二分查找是一个十分神秘的算法,因为就算你已经觉得差不多ok了,可在敲的时候总会有一步出错,你还半天找不出来。。。就nmd离谱Leecode33.搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。...

2019-12-24 18:18:42 244

原创 JSON Web Token(JWT)机制学习

零、先从传统身份认证说起HTTP是一种无状态的协议,也就是它并不知道谁是访问应用。把用户看成是客户端,客户端使用用户名还有密码通过了身份认证,不过下回这个客户端再发送请求的时候,服务端还得再验证一下,这就很麻烦。对于这个情况的解决方法是:当用户请求登录的时候,如果没有问题,我们在服务器端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的ID号发送给客户端,客户端收到以后把这...

2019-12-17 22:30:56 209

原创 Session学习小结

零、从会话技术讲起我理解的一次会话就是打开浏览器行一系列操作(打开各种链接,访问各种页面)后,再关闭浏览器。这就叫一次会话。会话在百度百科的定义是是指一个终端用户与交互系统进行通讯的过程。也就是说,会话技术是客户端浏览器与服务器进行不断交互的过程,在这个过程中,只要有一方不关闭,就可以说是在一次会话中。会话中包含多次请求和响应。会话技术的方式有两种:客户端会话技术cookie与服务端会话技术s...

2019-12-17 21:37:17 367

原创 JSP学习小结

零、什么是JSPJSP全称为Java Server Pages,即Java服务器页面。它是一个特殊的页面,其中既可以指定定义html标签,又可以定义Java代码(它有一个极大的好处就是简化书写)。本质上它是一个Servlet。一、JSP执行过程将xxx.jsp转译为xxx_jsp.javaxxx_jsp.java位于tomcat中的Catalina的文件下xxx_jsp.java是一个...

2019-11-10 17:50:45 160

原创 Cookie学习小结以及一个小案例(返回上次访问的时间,如果是第一次,则返回你好)

0、什么是Cookie?它有什么用?Cookie就是一个小型文本文件,里面是一些信息片段,它可以以自动地在浏览器和Web服务器之间进行交互,因此Cookie可以存储在多个页面间传递的信息。通俗的讲,你可以理解是在客户端本地存储的一些数据。Cookie作为HTTP header的一部分,它的传输始终受HTTP协议控制。HTTP是一种无状态协议,故Cookie也是无状态的。1、怎么用Cookie?...

2019-10-30 21:47:29 423

原创 Servlet学习的一个简单小实战(配合数据库登录案例)

前言:学习Servlet也有一段时间了,但是总感觉走马观花,学一学还是对实际操作不是很懂,最近在看学习视频中有介绍可以自己做一个连接数据库的登录小实战,就当是复习复习之前的JDBC编程那块,也顺便巩固了下Servlet中request和respons这边的常用操作。问题分析:基本上就是先写一个页面,其中包含输入账号密码,通过表单数据来进行跟MySQL数据库进行对接,判断输入的账号密码是否在数据库...

2019-10-28 22:53:54 162

原创 Java Servlet基础知识必知必会

一、什么是Servlet概念:Servlet是由两个单词Server和Applet拼接而成,意思为运行在服务器上的小程序。其实Servlet就是一个借口,定义了Java类被浏览器访问到(由tomcat识别)的规则。我们一般在使用的时候,会自己定义一个类,实现Servlet接口,并重写里面的方法(最快的)。二、Servlet快速入门1.创建JavaEE项目2.定义一个类,实现Servlet...

2019-10-23 14:26:34 255

原创 Java Map基础知识必知必会

Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另一组值用于保存Map里的value,key和value都可以是任何引用类型的数据。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false,如果后面插入的key与前边的重复了,则后面的会将前边的覆盖掉。key和value总是存在单向一对一的关系,即通过...

2019-09-22 16:26:06 138

原创 Java List基础必知必会

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。即可以用索引来访问指定位置List中的元素。List集合默认按元素的添加顺序设置元素的索引,List集合允许塞数据类型不一样的元素一、ArrayListArrayList为List集合类的典型实现,它是基于数组来实现的,内部封装了一个动态的、允许再分配的Object[]数组,默认长度为10,加载因子为1,一次扩容...

2019-09-22 13:58:02 110

原创 Java Set基础必知必会

Set集合,它类似与一个罐子,程序可以一次把多个对象“丢进”Set集合,而Set集合不能记住元素的添加顺序,Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。一、HashSet类HashSet类是Set接口的典型实现,HashSet按照Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。...

2019-09-19 19:15:16 97

原创 Java集合概述必知必会

一、Java集合概述为了保存数量不确定的数据,以及保存具有映射关系的数据,Java提供了集合类,集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所有的集合类都位于java.util包下,后来为了处理多线程环境下的并发安全问题,Java5还在java.util.concurrent包下提供了一些多线程支持的集合类。集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上...

2019-09-19 18:09:09 121

原创 写2个线程,其中一个线程打印1~52,另一个线程打印A~Z,打印顺序应该是12A34B...

写代码才发现了自己的问题就是学的不精。。首先写一个Print类:public class Print{ private boolean flag = true; private int number = 0; public void printNumber() throws Exception{ if(!flag){ this.w...

2019-08-09 11:51:15 494

原创 Java基础篇笔记(二):JDBC编程相关

一、JDBC常用接口和类简介DriverManager:用于管理JDBC驱动的服务类。程序中使用该类的主要功能是获取Connection对象,该类包含如下方法:public static synchronized Connection getConnection(String url,String user,String pass) throws SQLException 该方法获得ur...

2019-08-06 18:36:50 205

原创 Java基础篇笔记(五):Java中的异常处理机制

一、引入异常异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中的异常处理代码和正常业务代码分离,保证程序代码更加优雅,并可以提高程序的健壮性。Java的异常机制主要依赖于try、catch、finally、throw、throws五个关键字,其中try关键字后紧跟一个花括号括起来的代码块(花括号不可以省略),简称try块,它里面放置可能引发异常的代码。catch后对应异常类型...

2019-08-03 15:53:07 230

原创 Java基础篇笔记(六):Java泛型基础

一、引用泛型在Java集合中,有个缺点就是把一个对象“丢进”集合里之后,集合就会“忘记”这个对象的数据类型,当再次取出该对象时,该对象的编译类型就变成了Object类型(其运行时类型没有变)。Java集合这个设计也并无不妥,因为集合的设计者并不知道我们会用集合来保存什么类型的对象,所以他们把几个设计成能保存任何类型的对象。这种设计有很明显的缺陷:集合对元素类型没有任何类型,这样可能引发一些...

2019-08-03 10:09:02 148

原创 Java基础篇笔记(四):Java中的反射机制

在运行状态中,对于任何一个类,我们都能够直到这个类有哪些方法和属性;对于任何一个对象,我们都能够直到这个它的方法和属性来进行调用。我们把这种动态获取对象信息和调用对象方法的功能称为反射机制。...

2019-08-02 15:18:10 118

原创 Java基础篇笔记(三):Java类加载机制

一、类的加载,连接和初始化当调用Java命令运行某个Java程序时,该命令将会启动一个Java虚拟机进程,不管该Java程序有多么复杂,该程序启动了多少个线程,它们都处于该Java虚拟机进程里。即同一个JVM的所有线程、所有变量都处在同一个进程里,它们都使用该JVM进程的内存区。当系统出现以下几种情况时,JVM进程将被终止:1.程序运行到最后正常结束;2.程序运行到使用System.exi...

2019-08-02 10:43:59 95

原创 Java多线程基础(包括:线程的创建、状态生命周期、控制线程、线程同步、死锁、线程通信、线程池的基础知识)

一、引入与线程概述为什么要搞多线程?单线程的程序只有一个顺序执行流,多线程的程序则可以包括多个程序执行流,多个顺序流之间互不干扰。几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。当一个程序进入内存运行时,即变成一个进程。一般而言,进程包含如下三个特征:独立性:进程是...

2019-07-23 11:04:36 215

原创 Java基础篇笔记(一):Java IO

一、File类File类是java.io包下与平台无关的文件和目录,即如果希望在程序中操作文件和目录,都可以通过File类来完成。File能新建、删除、重命名文件和目录,File不能访问文件内容本身。如果需要访问文件内容本身,则需要输入/输出流。File类可以使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。一旦创建File对象后,就可以调用File对...

2019-07-18 16:12:47 117

原创 结构化查询语言(SQL)入门

数据库入门一、SQL语句基础SQL,即结构化查询语言。SQL是操作和检索关系数据库的标准语言,标准的SQL语句可用于操作任何关系数据库。标准的SQL语句通常可分为以下几种类型:1.查询语句:主要有select关键字完成,查询语句是SQL语句中最复杂,功能最丰富的语句;2.DML(数据库操作语言)语句:主要有insert、update、delete三个关键字完成;3.DDL(数据定义语...

2019-07-16 16:47:22 754

空空如也

空空如也

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

TA关注的人

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