自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常用设计模式——工厂模式

工厂模式1、简单工厂模式简单工厂模式,一个抽象的接口,多个抽象接口的实现类,一个工厂类,用来实例化抽象的接口// 抽象产品类abstract class Car { public void run(); public void stop();}// 具体实现类class Benz implements Car { public void run() { System.out.println("Benz开始启动了。。。。。"); } public

2020-07-19 21:13:02 257

原创 常用设计模式——代理模式

代理模式的定义代理模式:为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。代理模式通俗来讲就是我们生活中常见的中介。代理模式可以提供非常好的访问控制,应用比较广泛。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。代理模式的通用类图:为什么

2020-07-19 16:38:47 198

原创 Synchronized 和 Volatile、Lock 以及 ReentrantLock的区别

一、线程安全在三个方面体现1、原子性(atomic、synchronized、Lock)(1)原子的意思代表着——“不可分”;(2)在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。原子性是拒绝多线程交叉操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。例如 a=1是原子性操作,但是a++和a +=1就不是原子性操作。1.1、atomic实现原子性JDK里面提供了很多atomic类,AtomicInteger,AtomicLong,AtomicBoole

2020-07-18 12:51:18 1497

原创 乐观锁和悲观锁

一、并发控制当程序中可能出现并发的情况时,就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。常说的并发控制,一般都和数据库管理系统(DBMS)有关。在DBMS中的并发控制的任务,是确保在多个事务同时存取数据库中同一数据时,不破坏事务的隔离性和统一性以及数据

2020-07-17 16:29:35 141

原创 synchronized底层实现原理及锁优化

一、概述synchronized作用原子性:synchronized保证语句块内操作是原子的可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现)有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)synchronized的使用修饰实例方法,对当前实例对象加锁修饰静态方法,对当前类的Class对象加锁修饰代码块,对synchronized括号内的对象加锁二、实现原理JVM是基于进入

2020-07-17 12:20:47 513

原创 HTTP和HTTPS协议

1.什么是协议?网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。2.HTTP协议是什么?HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTPP有多个版本,目前广泛使用的是HTTP/1.1版本。3.H

2020-07-09 12:51:37 533

原创 JVM调优

一、基本介绍1、JVM实质上分为三大块,年轻代(YoungGen),年老代(Old Memory),及持久代(Perm,在Java8中被取消)。2、垃圾回收GC,分为2种,一是Minor GC,可以可以称为YGC,即年轻代GC,当Eden区,还有一种称为Major GC,又称为FullGC。3、GC原理:我们可以看到年轻代包括Eden区(对象刚被new出来的时候,放到该区),S0和S1,是幸存者1区和幸存者2区,从名字可以看出,是当发生YGC,没有被任何其他对象所引用的对象将会从内存中被清除,还被其

2020-07-08 11:49:45 289

原创 JVM主要组成部分及其作用

一、JVM主要组成部分及其作用JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载器)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地库接口)。Class loader(类加载器):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到运行时数据区中的方法区;Execution engine(执行引擎):执行引擎也叫解释器,负责解释命令,交由

2020-07-07 11:25:15 6646

原创 二叉树常见算法整理

/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/1、序列化二叉树实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久

2020-07-06 23:19:20 614

原创 二叉树的遍历(Java版)

二叉树的非递归遍历,主要借助于“栈”后进先出的特性来保存节点的顺序,先序遍历和中序遍历相对来说比较简单,重点理解后序遍历。先来看一下节点类型://二叉树的节点类型private class Node{ int data; //节点值 Node leftChild; //左孩子 Node rightChild; //右孩子 public Node(int data) { this.data=data; }}一、非递归版本1、先序遍历1.先将根节点入栈2.访问根节点3.如

2020-07-03 21:25:36 148

原创 Java垃圾回收机制、垃圾回收器

1.什么是垃圾回收机制1.1 垃圾回收垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。1.2 java中的引用类型有强到弱分为强引用(Strong Reference),软引用(Soft Reference),弱引用(Weak Refer

2020-07-02 23:07:33 222

原创 Java 内存溢出、内存泄漏分析及解决

一、内存溢出内存溢出 (out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;内存溢出的原因及解决方法:(1) 内存溢出原因:内存中加载的数据量过于庞大,如一次从数据库取出过多数据;集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;代码中存在死循环或循环产生过多重复的对象实体;使用的第三方软件中的BUG;启动参数内存值设定的过小(2)内存溢出的解决方案:第一步,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参

2020-06-30 23:15:52 1565

原创 浅拷贝和深拷贝的区别及实现

一、拷贝的引入(1)引用拷贝创建一个指向对象的引用变量的拷贝。Teacher teacher = new Teacher("Taylor",26);Teacher otherteacher = teacher;System.out.println(teacher);System.out.println(otherteacher);输出结果:blog.Teacher@355da254blog.Teacher@355da254结果分析:由输出结果可以看出,它们的地址值是相同的,那么它们肯

2020-06-30 20:41:42 320

原创 String、StringBuffer 和 StringBuilder

Java String 类(字符串常量)字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图:我们可以看到,初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间

2020-06-28 13:36:36 132

原创 Idea连接数据库生成JavaBean

1、通过Idea连接数据库单击侧边栏Database,选择连接的数据库类型,填写相应的数据库名称、数据库连接所需的地址、账户、密码2、生成POJO(Plain Ordinary Java Object,简单Java对象)然后选择生成的POJO到某一路径下,我选择放在bean包中点击OK后就可以在com.hims.bean中看到Tablename.java了,它包含于数据表对应的属性,如下表所示:生成的的Test.java (包名可能与实际路径不同,需要修改下)参考1、idea 根据

2020-06-23 22:39:47 1247

原创 ThreadLocal原理及使用场景

ThreadLocalThreadLocal是线程的内部存储类,是一个数据结构,有点像HashMap,可以保存"key : value"键值对,但是一个ThreadLocal只能保存一个,并且各个线程的数据互不干扰,可以在指定线程内存储数据,并且只有指定线程可以得到存储数据。ThreadLocal<String> localName = new ThreadLocal();localName.set("AAA");String name = localName.get();在线程1中

2020-06-20 17:52:42 1087

原创 多线程锁的升级原理

synchronized 原理synchronized 关键字编译后会在同步块的前后添加上 montorenter 和 monitorexit 两个字节码指令,这两个字节码指令都需要一个指向锁定和解锁对象的 reference,如果指定了同步的对象reference就指向这个对象,如果修饰的是方法,如果是类方法就指向Class对象,如果是实例方法就指向这个实例。对象头和锁synchronized 使用的锁存在 Java 对象头中。HotSpot 虚拟机的对象头分两部分信息,第一部分用于存储对象自身的运

2020-06-20 16:08:20 1754

原创 线程池的状态、submit()和execute()方法的区别

一、线程池的结构1、线程池管理器(ThreadPoolManager):用于创建并管理线程池2、工作线程(WorkThread): 线程池中线程3、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。4、任务队列:用于存放没有处理的任务。提供一种缓冲机制。二、线程池的5种状态Running、ShutDown、Stop、Tidying、Terminated。线程池各个状态切换框架图:RUNNING:线程池的初始化状态,接受新的任务,处理等待队列中的任务。线程池被一旦被创

2020-06-17 23:38:19 578 1

原创 从浏览器输入地址到服务器响应的整个过程

从浏览器输入地址到服务器响应的过程可以大致分成以下几个部分:1、DNS解析(分别从浏览器缓存,本地host文件,本地DNS服务器,根DNS服务器)2、建立TCP(得知服务器的ip和端口后,用socket建立连接,通过三次握手连接)3、用户发送请求和服务器响应请求4、浏览器页面渲染5、断开连接(四次挥手)一、DNS解析  首先要理解我们平时输入的URL各个字段的意思,比如https://tieba.baidu.com/index.ht服务协议:https 用://分离主机IP地址和端口号:t

2020-06-17 22:29:52 1537

原创 Redis安装(Windows版本)

一、获取安装包github获取安装包(1)进入安装包地址,选择 releases(2)在 releases 页面下载最新版二、安装  .msi是可执行文件,按安装步骤安装即可;zip直接解压就可以了。三、运行redis  有两种方式运行,一种是以windows服务的方式运行,另一种是不以服务的方式运行(CMD启动),后者在CMD中运行,当关闭CMD窗口,则redis服务就关闭。  在redis目录中有redis.windows-service.conf 和 redis.windows.c

2020-06-03 10:49:58 5062

原创 wait()和notifyAll()使用---生产者和消费者模型

锁池和等待池锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的锁目前正被线程A拥有,所以这些线程就进入了该对象的锁池中。等待池:假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁后,进入到了该对象的等待池中notify和notifyAll的区别  如果线程调用了对象的 wait(

2020-06-01 14:46:58 201

原创 实现线程的三种方式以及线程安全

  Java中使用Thread代表线程类,所有的线程类都必须是Thread类或者其子类的实例。每个线程的作用就是完成一定的任务,即执行一段程序流。Java中使用线程执行体来表示这段程序流。Java中线程的实现方式有如下三种:1.继承Thread类  定义Thread类的子类,并重写Thread类的run()方法,创建子类对象(即线程对象),调用线程对象的start()方法来启动该线程。package com.example;public class ThreadDemo extends Thre

2020-05-28 16:21:16 456

原创 Tomcat 下载、安装、配置

1、Tomcat下载(1)Tomcat官网:Tomcat官方网址,可以在此处下载Tomcat。(2)点击左侧Download下的对应版本。注意:有zip和exe两种格式的,zip是免安装版的,exe是安装版。同时观察自己的电脑是64位系统还是32位系统。例如进入:Tomcat 9 版本下载页面,下滑,到core处选择自己需要的版本,如图所示:我的电脑是64位,可以直接选择32-bit/64-bit Windows Service installer(pgp,md5,sha1),点击即可选择下载位

2020-05-25 12:40:34 162

原创 @Component 和 @Bean 的区别

  Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。  完成这两个动作有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。定义@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。@Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。区别:  @Component 通常

2020-05-19 16:14:47 109

原创 页面跳转时屏幕出现抖动现象

  在做基于springboot的restful-crud实验Demo时,为了防止表单重复提交,重定向页面到/main.html,但跳转成功后出现页面持续抖动的问题,查找了资料,说是由于高度引起的。解决代码如下: <style> body{overflow:scroll;} <!-- 或者 body{overflow-y:scroll;} --> </style>...

2020-05-16 11:14:33 652

原创 Ctrl+F9实现IDEA手动编译文件(主要用于html编译)

  利用IDEA开发SpringBoot项目,引入Thymeleaf模板,在不重新启动项目的情况下如何使修改的html页面生效?在pom.xml文件中添加依赖如下<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional&g

2020-05-12 14:18:11 3137

原创 B+树、索引以及SQL优化

mysql的B+树索引 查找使用了二分查找,redis 跳表也使用了二分查找法,kafka查询消息日志也使用了二分查找法,二分查找法时间复杂度O(logn);在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引(MyISAM 表)和R-Tree索引,本文讲的是B-Tree索引。mysql使用了 B+索引:B树:有序数组+平衡多叉树;B+树:有序数组链表+平衡多叉树;一、Mysql索引主要有两种结构:B+Tree索引和Hash索引(a) Inodb存储

2020-05-11 14:38:29 548

原创 SpringBoot中WebMvcConfigurerAdapter、WebMvcConfigurationSupport以及WebMvcConfigurer

在spring boot1.0+,我们可以使用WebMvcConfigurerAdapter来扩展springMVC的功能,其中自定义的拦截器并不会拦截静态资源(js、css等)。@Configurationpublic class MyMvcConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) {

2020-05-10 11:40:18 316 1

原创 SprinBoot读取国际化属性文件数据显示问题--解决

在IDEA下,创建SpringBoot项目并配置国际化属性文件时,界面显示如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200510111304912.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0NjQ2Mg==,size_16,color_FFFFFF,t_7...

2020-05-10 11:14:32 488 1

原创 B树和B+树

B树的创建就是为了优化数据库查找,如果采用二叉查找树(时间复杂度只要LogN)来进行查找,那么在磁盘进行I/O操作时,(数据太大需要进行分页)每个磁盘页对应一个节点;最坏情况:查找次数等于输的高度(时间复杂度LogN)。例如:自顶向下查找10:需要4次那这样的话,通过将树变成矮树胖树即可,B树的结构:每个节点不超过磁盘页的大小(这里是3阶B树,每个磁盘页大小是3)即可;每个节点的结构:...

2020-04-29 11:50:46 1017

原创 Ubuntu16.04安装mysql

Ubuntu16.04安装mysql一、安装mysql1.依次执行以下命令:2.安装结束后,可通过执行以下命令检测是否安装成功:二、Linux下远程连接MySQL数据库1.首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf,并注释bind-address = 127.0.0.1,然后保存退出。2.通过以下命令进入mysql服务3.执行授权命令4.执行exit命令退出m...

2020-01-10 15:39:14 104

原创 使用VMware基于虚拟机centos7搭建Hadoop集群

一、虚拟机安装centos71、卸载openjdk1.1 查看虚拟机已有的java版本[root@localhost wxx]# java -version1.2 查看openjdk版本[root@localhost wxx]# rpm -qa | grep jdk1.3 除.noarch,其余全部删除[root@localhost wxx]# rpm -e --nodeps...

2019-11-29 20:21:16 1121

原创 ubuntu16.04添加/删除用户

1、创建新用户lx@lx-System-Product-Name:~$ sudo adduser yourUserName此处需要为git账户指定密码,请务必指定,不要设为空,否则会出错2、切换用户lx@lx-System-Product-Name:~$ sudo su - yourUserName3、删除用户lx@lx-System-Product-Name:~$ userdel...

2019-11-28 17:59:47 1143

转载 HDFS -put命令报错 put: Cannot create file/test.txt._COPYING_. Name node is in safe mode.

put: Cannot create file/test.txt.COPYING. Name node is in safe mode.一、可能是因为没有离开安全模式利用:hadoop dfsadmin -safemode leave命令离开安全模式如果没有配置hadoop的环境变量需要进入hadoop目录下的bin目录执行上面哪个命令。二、是因为你的磁盘已经爆满导致你离开安全模式后依然报...

2019-11-18 23:47:18 3559 1

转载 Windows查看端口占用

一、 查看所有进程占用的端口在开始-运行-cmd,输入:netstat –ano 可以查看所有进程【此处可以使用ctrl + F搜索指定的端口号】二、查看占用指定端口的程序当你在用tomcat发布程序时,经常会遇到端口被占用的情况,我们想知道是哪个程序或进程占用了端口,可以用该命令 netstat –ano|findstr [指定端口号]如:查询占用了8080端口的进程:netstat ...

2019-11-18 16:13:18 144

原创 Ubuntu 16.4 安装Qt 5.9.2

准备环境:ubuntu官网下载链接https://www.ubuntu.com/download/desktop,随意下载版本即可,安装完成Linux qt下载:https://www.qt.io/download,1.安装Qt打开https://www.qt.io/download网页,找到下拉找到可能需要注册账号之后才可以下载对于版本的qt,注册的账号在安装的时候也会用到下载q...

2019-11-12 13:51:05 858

转载 大驼峰命名法和小驼峰命名法

原文链接:https://blog.csdn.net/jerry11112/article/details/84985026前言我们在做项目的时候,命名格式必须统一,这样才会方便不同人之间的编码阅读!,所以今天就来说一下驼峰命名法!骆峰式命名法(Camel-Case)是电脑程式编写时的一套命名规则(惯例)。骆峰式命名法就是当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时...

2019-11-02 10:42:37 2853 1

空空如也

空空如也

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

TA关注的人

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