- 博客(32)
- 收藏
- 关注
原创 nginx反向代理
1. 什么是代理在Java设计模式中,代理模式是这样定义的:给某个对象提供一个代理对象,并由代理对象控制原对象的引用。简单来说,就是如果我们想做什么,但又不想直接去做,那么这时候就找另外一个人帮我们去做。Nginx 主要能够代理如下几种协议,其中用到的最多的就是做Http代理服务器。2. 正向代理和反向代理2.1 正向代理 架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求...
2022-01-15 09:03:15
1687
原创 JVM常用调优参数
1. -Xms20M表示设置JVM启动内存的最小值为20M,必须以M为单位2. -Xmx20M表示设置JVM启动内存的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免JVM内存自动扩展。大的项目-Xmx和-Xms一般都要设置到10G、20G甚至还要高3. -verbose:gc表示输出虚拟机中GC的详细情况4. -Xss128k表示可以设置虚拟机栈的大小为128k5. -Xoss128k表示设置本地方法栈的大小为128k。不过HotSpot并不区分虚
2022-01-14 17:42:58
310
原创 并发的原子性 可见性 有序性和classloader
原子性是指一个操作或多个操作要么全部执行,且执行的过程不会被任何因素打断,要么就都不执行。原子操作原理(处理器是如何实现原子操作的)处理器实现原子操作有3种方式:1.处理器自动保证基本内存操作的原子性首先说明,处理器会自动保证基本的内存操作是原子性的。处理器保证从系统内存中读取或写入一个字节是原子的。当然,long和double类型在32位操作系统中的读写操作不是原子的,因为long和double占64位,需要分成2个步骤来处理,在读写时分别拆成2个字节进行读写。因此long和doubl
2022-01-11 22:41:54
258
原创 Java的内存屏障
一.什么是内存屏障1.1 概念内存屏障(memory barrier)是一个CPU指令。基本上,它是这样一条指令:确保一些特定操作执行的顺序; 影响一些数据的可见性(可能是某些指令执行后的结果)。编译器和CPU可以在保证输出结果一样的情况下对指令重排序,使性能得到优化。插入一个内存屏障,相当于告诉CPU和编译器先于这个命令的必须先执行,后于这个命令的必须后执行。内存屏障另一个作用是强制更新一次不同CPU的缓存。例如,一个写屏障会把这个屏障前写入的数据刷新到缓存...
2022-01-11 22:13:34
160
原创 classfile解析
前言在讲解内容之前我们要先了解什么是classfile:在java中,通过javac编译生成class文件,这个Class文件是一组以8个字节为基础单位的二进制字节流。各项数据会严格的按照顺序紧凑的排列在class文件中,中间没有分隔符,使得class文件存储的内容几乎全部都是程序运行的。可以使用Sublime_Text,IDEA 中的插件 BinEd - Binary/HexadecimalEditor来查看classfileClassfile文件结构解析class文件格式采用的类
2022-01-09 23:55:59
676
原创 SpringMVC实现上传与下载
配置文件1.导入pom文件依赖 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>co
2021-09-24 23:47:55
52
原创 SpringMVC实现数据的增删改查
资源配置1.引入pom.文件 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency
2021-09-24 22:12:38
316
原创 SpringMVC执行过程
什么是SpringMVCSpringMVC是Spring框架的一个模块,是基于mvc的web framework模块。MVC是一种设计模式,即model-view-controller,mvc在b/s系统下的应用如下图所示SpringMVC 优点基于 MVC 架构,功能分工明确。解耦合, 容易理解,上手快;使用简单。就可以开发一个注解的 SpringMVC 项目,SpringMVC 也是轻量级的,jar 很小。不依赖的特定的接口和类。 作为Spring 框架一部分,能够使..
2021-09-24 21:31:36
55
原创 Java内存模型和内存溢出异常
概述对于C和C++开发人员来说,在内存管理方面,他们既拥有每一个对象的“所有权”,又要担负每一个对象生命从开始到终结的维护。对于Java开发人员来说,在虚拟机的自动内存管理机制下,不需要对为每一个new操作去书写相应的delete/free方法,而且不容易发生内存泄露和内存溢出。把内存的管理交个了java虚拟机,一旦出现内存泄露和溢出的问题,不了解虚拟机是如何使用内存的,排错将会非常困难。Java内存模型Java虚拟机所管理的内存将会包括下面几个数据区域。程序计数器程序计..
2021-09-23 00:16:41
95
原创 Spring—事务配置及mybatis整合
事务的配置1.什么是事务指作为单个逻辑工作单元(Service方法)执行的一系列操作(数据库操作),要么完全地执行,要么完全地不执行。事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。2.事务的四大特性事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID,缺一不可。原子性:不可分割,一个事务就是一个最小的无法分割的独立单元,不允许部分成功部分失败
2021-09-17 11:48:46
88
原创 Spring-Aop及jdbc总结
什么是AopAOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于
2021-09-16 22:38:32
128
原创 Spring-IoC注解
注解的使用1)Spring配置文件引入context约束<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org.
2021-09-14 23:28:09
94
原创 Spring IOC
1.Spring框架概述1.1 什么是SpringSpring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成
2021-09-13 23:45:56
201
原创 JQuery选择器
1. 基本选择器 基本选择器是JQuery最常用的选择器,也是最简单的选择器,它通过元素id、class和标签名来查找DOM元素(在网页中id只能使用一次,class允许重复使用)。所谓的网页中id只能使用一次的意思是说,一个网页中的id是不可以重复的,也就是具有唯一性。1、#id 用法: $("#myDiv"); 返回值 单个元素的组成的集合说明: 这个就是直接选择html中的id="myDiv"2、Element用法: $("div") 返回值 集合元素说...
2021-09-12 20:47:23
65
原创 线程池原理
1. 为什么要用线程池 降低资源消耗。通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控 2. ThreadPoolExecutor线程池类参数详解参数 说明 corePoolSize 核心线程数量,线程池维护线程的最少数量 maximumP
2021-08-18 09:35:53
62
原创 GC的基本概念和GC算法
JVM是如何判断堆中的对象是无用数据?一般有两种方法:1.引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,但无法解决对象相互循环引用的问题。2.根可达算法GC Roots(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,即为不可达对象。JVM的三种基本算法1.标记-清除算法(Mark-
2021-08-17 00:09:09
225
原创 红黑树(全图解)
什么是红黑树?红黑树就是一种平衡二叉树,说它平衡的意思是它不会出现左子树与右子树的高度之差不会大于1,左子树和右子树保持一种平衡的关系。5个性质:每个节点要么为黑色,要么为红色。 根节点是黑色。 每个叶子节点是黑色是空节点(null)。 每个红色节点的两个子节点一定是黑色。 任意一个节点到每个叶子节点的路径都包含数量相同的黑色节点(黑高)。如图:为什么红黑树能自平衡?红黑树自平衡靠的是三种操作:左旋、右旋、变色。变色:节点的颜色由红变黑或由黑变红左旋:以某个..
2021-08-15 23:50:21
199
原创 HashMap底层原理
一.概述HashMap是基于 Map 接口的实现,元素以键值对的方式存储,并且允许使用null建和null值,因为key不允许重复,因此只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不能相同。HashMap是线程不安全的。在了解HashMap之前,需要对它所使用的数据结构所了解,在jdk1.8之前HashMap的底层实现 数据结构:数组+链表。在jdk1.8之后的HashMap 数据结构:数组+链表+红黑树(特殊的平衡二叉树)。数组:采用一段连续的存
2021-08-11 22:45:47
475
原创 线程间的通讯
一.为什么需要线程通讯线程是操作系统调度的最小单位,有自己的栈空间,可以按照既定的代码逐步的执行,但是如果每个线程间都孤立的运行,那就会造资源浪费。所以在现实中,我们需要这些线程间可以按照指定的规则共同完成一件任务,所以这些线程之间就需要互相协调,这个过程被称为线程的通信。线程间的通讯定义:多个线程在操作同一份数据时,互相告知自己的状态,避免对同一共享变量的争夺。二.线程间的通讯方式线程通讯的方式主要可以分为三种方式,共享内存、消息传递和管道流。1.共享内存 (1)...
2021-08-08 17:15:14
2833
原创 Java深拷贝和浅拷贝
开发过程中,有时会遇到把现有的一个对象的所有成员属性拷贝给另一个对象的需求。比如说对象 A 和对象 B,二者都是 ClassC 的对象,具有成员变量 a 和 b,现在对对象 A 进行拷贝赋值给 B,也就是 B.a = A.a; B.b = A.b;这时再去改变 B 的属性 a 或者 b 时,可能会遇到问题:假设 a 是基础数据类型,b 是引用类型。当改变 B.a 的值时,没有问题;当改变 B.b 的值时,同时也会改变 A.b 的值,因为其实上面的例子中只是把 A.b 赋值给了 B.b,因为是 b
2021-08-08 12:40:52
57
原创 Java:强引用,软引用,弱引用,虚引用
一.强引用(StrongReference)强引用是指普通的对象引用,是最普遍的存在。如果一个对象具有强引用,那么GC(垃圾回收器)绝不会回收它。例如:StringBuilder str = new StringBuilder("hello world");String s = "hello world";但内存空间不足是,Java虚拟机宁可抛出OutOfMemoryError错误,使程序异常终止,也不回收。public class StrongReference { pu
2021-08-07 17:22:57
48
原创 Java中值传递和引用传递
一.基本数据类型与引用数据的区别基本数据的变量保存的是原始值,变量就是数据本身。常见的基本数据类型:byte,short,int,long,float,double,char,boolean引用数据类型的变量保存的是变量的首地址空间,通过这个来操作。常见的引用数据类型:类,接口,数组。如图:图中的num就是基本数据,直接保存数据。 s是引用数据类型,保存的实际的变量的地址空间二.值传递和引用传递值传递是对于基本数据类型来说,传递的自己的副本,这个副本改变不会对自己造...
2021-08-05 23:47:07
40
原创 CSS布局之flex弹性布局
1、Flex简介Flex 是 Flexible Box的缩写, 意思是"弹性布局", 用来为盒状模型提供最大的布局灵活性,任何一个容器都可以设置为Flex布局模式。/* 块元素可以设置为Flex容器 */.container { display: flex;}/*内联元素也可以设置为Flex*/span { display: inline-flex;}/* WebKit内核浏览器,如Safari, 需要加前缀*/div { display: -webkit-flex;
2021-07-12 08:35:57
150
原创 Java异常类型及处理
一、什么是异常定义:在程序运行过程中出现的错误,称为异常。异常就是程序运行过程中出现了不正常现象导致程序的中断。在Java中,把各种异常现象进行了抽象形成了异常类二、异常的分类2.1异常的类结构图2.2异常的分类异常主要分为:错误、非运行时异常(检查异常)、运行时异常(非检查异常)错误:程序在运行时发生的非人为的难以避免,并且不好解决的特殊情况,最典型的Error的异常是:OutOfMemoryError非运行时异常:是指程序编写的过程会出现一些安全的隐患,一些异..
2021-07-11 20:25:03
72
原创 设计模式之抽象工厂模式
,抽象工厂模式(Abstract Factory Pattern)相对于工厂方法模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列。抽象工厂模式属于设计模式中的创建型模式一、抽象工厂模式抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族。比如:同一个品牌(有不同的产品)就代表一个产品族。同一个产品(有不同的品牌制造)就代表一个产品等级。如图中的小米手机和小米路由器为一个产品族,而小米路由器和华为路由器闻同一产品等级
2021-07-11 18:55:47
45
原创 设计模式之工厂方法模式
工厂方法模式是简单工厂模式进一步抽象化,其好处是可以使系统在不需要进修改具体工厂角色的情况下引进新的产品,即满足开闭原则。一、工厂方法模式1.定义工厂方法模式(FACTORY METHOD)是常用的类创建型设计模式、又被称为多态工厂模式。定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
2021-07-11 16:05:05
48
原创 Java双端队列
概念双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构。将队列的两端分别称为前端和后端,两端都可以入队和出队。示意图具体实现public class Deque<T> { private LinkedList<T> linkedList=new LinkedList<>(); //获取双端队列大小 public int size(){ return linked.
2021-07-10 20:46:41
355
原创 二叉树的前序,中序,后序遍历(递归和非递归写法)
一、前序遍历前序遍历是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根节点,然后遍历左子树,最后遍历右子树。若二叉树为空则结束返回,否则:(1)访问根结点。(2)前序遍历左子树。(3)前序遍历右子树 。 如图所示,前序遍历的结果为:ABDECFG递归实现:...
2021-07-09 21:31:42
1206
1
原创 单例模式的七种写法及其优缺点分析
模式设计设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供
2021-06-03 23:59:30
85
原创 简单页面设计思路
初次编写网页的思路下面是我根据视频学习的网页该网页由多个页面组成,我就以其中的首页页面介绍:首先在文件夹先建立一个文件用于存放需要用到的图片和对应的css文件,如图所示:用link将css样式导入到HTML中:<link rel="stylesheet" type="text/css" href="./homepage.css">通过观察首页的布局,我们可以发现该页面由页眉,导航栏,导航栏下面的图片,正文,页脚,侧栏等组成。这些都可以看成不同的盒子。我将对每一部分进行介绍。
2021-05-08 22:43:29
2510
原创 HTML入门学习
HTML介绍HTML是什么HTML 是用来描述网页的一种语言。HTML 指的是超文本标记语言 (Hyper Text Markup Language)HTML 不是一种编程语言,而是一种标记语言(markup language)HTML 使用标记标签来描述网页HTML文档的结构基本结构常用标签基本标签标签含义说明h1—h6标题标签标题文字大小由1到6依次减小,默认加粗hr水平分割线在视觉上将文档划分为不同的部分p段落标签将文字分为不同的段
2021-04-26 12:38:39
406
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人