自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 《生活的本质》

生活的本质是什么?你是否想过?每天行色匆匆地玩着时间变现的游戏,忍受着金主无情的压榨和鞭策,被各种游戏规则磨去邻角,只为了让自己成为别人口中的“好物”,我们都成了时间的傀儡,我也努力着鼓励着自己要积极向上,要迭代更新自己的技术,让自己时间越来越值钱,让自己每一天过得更加充实,我相信滴水穿石,我相信努力可以改变现状,我也是这样做的,但是,这个真的重要吗?有时候也问自己不进大厂学那么多干嘛?背背面试题也一样可以找到这个价格的工作,何必苦了自己?有时候感觉自己很迷茫,普通程序员的心架构师的梦,一眼看到头的路。或

2021-11-02 17:44:50 1583

原创 设计模式(十五)--行为型模式:命令模式

一、智能生活项目需求看一个具体的需求1、我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装 app就可以控制对这些家电工作。2、这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个 App,分别控制,我们希望只要一个app就可以控制全部智能家电。3、要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时就可以考虑使用命令模式。4、命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来。5、在我们的例子中,动作

2021-11-01 17:17:50 277

原创 设计模式(十四)--行为型模式:模板方法模式

一、豆浆制作问题编写制作豆浆的程序,说明如下:1、制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎 。2、通过添加不同的配料,可以制作出不同口味的豆浆。3、选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的。4、请使用模板方法模式 完成。二、模板方法模式2.1.基本介绍1、模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行 它的方法的模板。它的子类

2021-10-29 16:45:29 201

原创 设计模式(十三)--结构型模式:代理模式

一、代理模式1.1.基本介绍1、代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。2、被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。3、代理模式有不同的形式, 主要有三种:静态代理、动态代理 (JDK 代理、接口代理)和 Cglib 代理 (可以在内存 动态的创建对象,而不需要实现接口, 它是属于动态代理的范畴) 。1.2.示意图二、静态代理2.1.

2021-10-27 11:45:34 104

原创 设计模式(十二)--结构型模式:享元模式

一、展示网站项目需求小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网 站,但是要求都有些不同:1、有客户要求以新闻的形式发布。2、有客户人要求以博客的形式发布。3、有客户希望以微信公众号的形式发布。二、传统方案解决网站展现项目1、 直接复制粘贴一份,然后根据客户不同要求,进行定制修改。2、给每个网站租用一个空间。3、方案设计示意图三、传统方案解决网站展现项目-问题分析1、需要的网站结构相似度很高,而且都不是高访问量

2021-10-26 15:47:35 57

原创 多线程与高并发(五)--AQS源码阅读与强软弱虚4种引用以 及ThreadLocal原理与源码

一、通过ReentrantLock来解读AQS源码1.1.什么是AQS?AQS最核心的是它的一个共享的int类型值叫做state,这个state用来干什么,其实主要是看他的子类是怎么实现的,比如ReentrantLock这个state是用来干什么的?拿这个state来记录这个线程到底重入了多少次,比如说有一个线程拿到state这个把锁了,state的值就从0变成了1,这个线程又重入了一次,state就变成2了,又重入一次就变成3等等,什么时候释放了呢?从3变成2变成1变成0就释放了,这个就是AQS

2021-10-20 11:36:36 76

原创 设计模式(十一)--结构型模式:外观模式

一、影院管理项目组建一个家庭影院:DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关 开爆米花机 放下屏幕 开投影仪 开音响 开 DVD,选 dvd 去拿爆米花 调暗灯光 播放观影结束后,关闭各种设备。二、传统方式解决影院管理三、传统方式解决影院管理问题分析1、在 ClientTest 的 main 方法中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过程混乱,没有清晰的过程 。2、不利

2021-10-19 10:17:47 116

原创 设计模式(十)--结构型模式:组合模式

一、看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。如图二、传统方案解决学校院系展示(类图)三、传统方案解决学校院系展示存在的问题分析1、将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 。2、 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历

2021-10-18 16:08:09 85

原创 设计模式(九)--结构型模式:装饰模式

一、场景-星巴克咖啡订单项目1、咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 。2、调料:Milk、Soy(豆浆)、Chocolate。3、要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便 。4、使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。二、方案 1-解决星巴克咖啡订单项目2.1.实现2.2.问题分析1、 Drink 是一个抽象类,表示饮料

2021-10-18 11:31:32 98

原创 Redis之初识篇

一、前置知识1.读写速度1.1.磁盘寻址:毫秒ms级别的。带宽:单位时间内能传输的字节流能有多少,几个G或几M。1.2.内存寻址:纳秒ns级别的。秒=1000毫秒=10001000微妙=10001000*1000纳秒。在寻址上,磁盘比内存慢了10万倍。带宽:很大2.I/O Buffer磁盘有磁道、扇区,一扇区为512 Byte,如果每次从磁盘读取512 Byte会带来一个成本问题,即索引体积太大(叶太多),所以操作系统无论读多少数据,最少从磁盘读取4K大小的数据。

2021-10-15 12:24:42 124

原创 MySQL面试题汇总(一)--1-50题

1、 简述在MySQL数据库中引擎MyISAM和InnoDB的区别?2、MySQL中有哪几种锁?3、CHAR和VARCHAR的区别?4、主键和候选键有什么区别?5、LIKE 声明中的%和_是什么意思?6、LIKE 声明中的%和_是什么意思?7、优化数据库的方法?8、简单描述 MySQL 中索引、主键、唯一索引、联合索引的区别,对数据库的性能有什么影响(从读写两方面)?9、BLOB 和 TEXT 有什么区别?10、什么情况下设置了索引但无法使用?11、 SQL注入漏洞产生的原因?如何防止?

2021-10-13 11:09:57 67

原创 设计模式(八)--结构型模式:桥接模式

一、手机操作问题现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图:二、传统方案解决手机操作问题2.1.传统方案类图2.2.传统方案问题分析1、扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加 一个手机品牌,也要在各个手机样式类下增加。2、违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本。3、 解决方案-使用桥接模式。三、桥接模式(Bridge)3.1

2021-10-11 15:39:47 95

原创 设计模式(七)--结构型模式:适配器模式

一、现实生活中的适配器例子泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了。二、基本介绍1、适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 。2、适配器模式属于结构型模式 。3、主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。三、工作原理1、适配器模式:将一个类的接口转换成另一种接口,让原

2021-10-08 15:24:54 91

原创 设计模式(六)--创建型模式:建造者模式

一、盖房项目需求1、需要建房子:这一过程为打桩、砌墙、封顶 。2、 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的。二、传统方式解决盖房需求2.1.类图2.2.代码实现创建一个抽象房子类,可以创建各种房子public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void b

2021-10-07 16:53:38 101

原创 设计模式(五)--创建型模式:原型模式

一、克隆羊问题现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10 只羊。二、传统方式解决克隆羊问题2.1.传统方式类图2.2.代码实现Sheep.javapublic class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, S

2021-10-06 17:59:00 118

原创 mysql调优(十)--服务器的参数设置

一、general(通用)思维导图datadir=/var/lib/mysql数据文件存放的目录socket=/var/lib/mysql/mysql.sockmysql.socket表示server和client在同一台服务器,并且使用localhost进行连接,就会使用socket进行连接pid_file=/var/lib/mysql/mysql.pid存储mysql的pidport=3306mysql服务的端口号default_storage_e

2021-10-04 22:27:16 154

原创 mysql调优(九)--分区表

思维导图一、分区表的应用场景1.表非常大以至于无法全部都放在内存中,或者只在表的最后部分有热点数据,其他均是历史数据2.分区表的数据更容易维护批量删除大量数据可以使用清除整个分区的方式对一个独立分区进行优化、检查、修复等操作3.分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备4.可以使用分区表来避免某些特殊的瓶颈innodb的单个索引的互斥访问ext3文件系统的inode锁竞争可以备份和恢复独立的分区二、分区表的限制一个表最多只能有1024个

2021-10-04 16:59:17 140

原创 设计模式(四)--创建型模式:工厂模式

一、简单工厂模式(静态工厂模式)1.1.具体的需求看一个披萨的项目:要便于披萨种类的扩展,要便于维护 。1、披萨的种类很多(比如 GreekPizz、CheesePizz 等) 。2、披萨的制作有 prepare,bake, cut, box 。3、 完成披萨店订购功能。1.2.传统的方式来完成类图将Pizza 类做成抽象的,因为每一种披萨的做法不一样public abstract class Pizza { protected String name; /

2021-09-29 11:01:02 65

原创 设计模式(三)--创建型模式:单例模式

一、单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象SessionFactory 并不是 轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。二、单例设计模式八种方式(1)饿汉式(静态常量)(2)饿汉式(静

2021-09-28 11:40:39 67

原创 设计模式(二)--UML类图和设计模式概述

一、UML类图1.UML 基本介绍UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用 于帮助软件开发人员进行思考和记录思路的结果。UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如右图:用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。类之间的关系:依赖、泛化(继承)、实现、关联

2021-09-26 15:41:55 2351

原创 mysql基础(五)之--数据的完整性

一、数据的完整性1.作用保证用户输入的数据保存到数据库中是正确的。2.确保数据的完整性在创建表时给表中添加约束。3.完整性分类实体完整性域完整性引用完整性二、实体完整性实体:即表中的一行(一条记录)代表一个实体(entity)。实体完整性的作用:标识每一行数据不重复。约束类型:主键约束(primary key)、唯一约束(unique)、自动增长列(auto_increment)。1.主键约束(primary key)1.1.特点:数据唯一,且不能为null。1.2.第

2021-09-26 11:54:52 134

原创 mysql基础(四)之--DQL(Data Query Language)

目标:DQL数据查询语言(SELECT、WHERE、 HAVING)一、SELECT关键字语法1.说明数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。查询返回的结果集是一张虚拟表。2.语法SELECT selection_list /*要查询的列名称*/FROM table_list /*要查询的表名称*/WHERE condition /*行条件*/GROUP BY group

2021-09-26 11:53:10 126

原创 mysql基础(三)之--DML(Data Manipulation Language)

DML是对表中的数据进行增、删、改的操作(INSERT 、UPDATE、 DELETE)一、插入操作:INSERT1.语法INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);2.注意事项列名与列值的类型、个数、顺序要一一对应,值不要超出列定义的长度。如果插入空值,请使用null插入的日期和字符时,要使用引号括起来。3.实例创建表create table emp( id int, name varchar(100),

2021-09-26 11:51:53 55

原创 mysql基础(二)之--DDL(Data Definition Language)

目标:掌握如何使用的关键字(CREATE、 ALTER、 DROP)一、操作数据库1.创建创建数据库mysql> CREATE DATABASE 数据库名mysql> CREATE DATABASE test创建数据库设置字符集mysql> CREATE DATABASE mydb CHARACTER SET utf8;创建数据库设置字符集和COLLATEcollation:英译[核对]即比对方法,用于指定数据集如何排序,以及字符串的比对规则。mysql

2021-09-26 11:50:03 38

原创 mysql基础(一)之--初识MySQL

一、安装数据库这个步骤比较简单,我就不在这里侮辱各位的智商了。二、数据库服务器、数据库和表的关系数据库服务器:数据库管理程序,可以管理多个数据库。表:保存程序中实体的数据。关系如图:三、登录MySQL前提:确保MySQL服务安装成功查询是否安装成功(版本号):cmd命令,输入"mysql -V"命令行登录:(回车会提示输入密码)mysql> mysql -u root -p 显示数据库。mysql> show databases;退出。mys

2021-09-26 11:45:37 50

原创 mysql调优(八)--查询优化

一、查询慢的原因网络CPUIO上下文切换系统调用生成统计信息锁等待时间二、优化数据访问2.1.访问的数据太多查询性能低下的主要原因是访问的数据太多,某些查询不可避免的需要筛选大量的数据,我们可以通过减少访问数据量的方式进行优化1.确认应用程序是否在检索大量超过需要的数据.2.确认mysql服务器层是否在分析大量超过需要的数据行2.2.是否向数据库请求了不需要的数据查询不需要的记录(优化方式是在查询后面添加limit)我们常常会误以为mysql会只返回需要的数据

2021-09-25 18:04:12 355

原创 设计模式(一)之--设计模式的七大原则详细介绍

一、设计模式的目的二、设计模式的七大原则1.单一职责原则1.1.介绍对类来说的,即一个类应该只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更 而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2。1.2.案例说明以交通工具案例讲解1.2.1 方式一在方式 1 的 run 方法中,违反了单一职责原则,解决的方案非常的简单,根据交通工具运行方法不同,分解成不同类即可。1.2.2 方式二1.3.案例优化1.4.

2021-09-23 16:36:55 99

原创 多线程与高并发(四)--LockSupport、淘宝面试题与源码阅读方法论

一、LockSupport1.传统方法的局限性以前我们要阻塞和唤醒某一个具体的线程有很多限制1、因为wait()方法需要释放锁,所以必须在synchronized中使用,否则会抛出异常IllegalMonitorStateException2、notify()方法也必须在synchronized中使用,并且应该指定对象3、synchronized()、wait()、notify()对象必须一致,一个synchronized()代码块中只能有一个线程调用wait()或notify()2.L

2021-09-16 15:26:43 83

原创 mysql调优(七)--索引的几个概要

一、哈希索引思维导图1.哈希索引的特点基于哈希表的实现,只有精确匹配索引所有列的查询才有效在mysql中,只有memory的存储引擎显式支持哈希索引哈希索引自身只需存储对应的hash值,所以索引的结构十分紧凑,这让哈希索引查找的速度非常快2.哈希索引的限制1、哈希索引只包含哈希值和行指针,而不存储字段值,索引不能使用索引中的值来避免读取行2、哈希索引数据并不是按照索引值顺序存储的,所以无法进行排序3、哈希索引不支持部分列匹配查找,哈希索引是使用索引列的全部内容来计算哈希值4、哈希

2021-09-11 16:24:38 145

原创 mysql调优(六)--索引的基础知识

思维导图

2021-09-09 09:53:08 268

原创 多线程与高并发(三)--Atomic类和线程同步新机制

一、什么是无锁操作?举个例子模拟我们计一个数,所有的线程都要共同访问这个数count值,大家知道如果所有线程都要访问这个数的时候,如果每个线程给它往上加了10000,你这个时候是需要加锁的,不加锁会出问题。但是,你把它改成AtomicInteger之后就不用在做加锁的操作了,因为incrementAndGet内部用了cas操作,直接无锁的操作往上递增,无锁的操作效率会更高。/** * 解决同样的问题的高效方法,使用AtomXXX类 * AtomXXX类的本身方法都是原子性的,但不能保证多个

2021-09-06 17:07:12 237

原创 mysql调优(五)--mysql索引数据结构基础

2021-09-06 17:00:57 331

原创 mysql调优(四)--mysql执行计划

mysql执行计划一、SQL语句的执行流程1.MySQL的逻辑架构图2.何为连接器?执行SQL语句的第一步肯定是需要连接数据库。这部分负责用户的身份认证。3.何为查询缓存(8.0移除)?该部分缓存了执行过的SELECT语句以及相应的结果集,并以key-value的方式缓存在内存中。建立连接后,执行查询语句的时候首先会在这里验证sql语句是否执行过,如果命中了key,就直接会将value返回给客户端,如果没有就进入分析器中执行后续操作。但是实际业务中会频繁发生缓存失效的问题,因为当你执

2021-09-03 11:21:39 139

原创 mysql调优(三)--schema(模式)

schema(模式)思维导图一、合理使用范式和反范式1.何为原子性?程序的原子性指:整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。及时在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。2.范式有哪些?1.第一范式(确保每列保持原子性)第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 例如:

2021-09-02 12:31:11 218

原创 mysql调优(二)--数据类型优化

思维导图数据类型优化1.更小的通常更好应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期更少,但是要确保没有低估需要存储的值的范围,如果无法确认哪个数据类型,就选择你认为不会超过范围的最小类型。案例:设计两张表,设计不同的数据类型,查看表的容量。2.简单就好简单数据类型的操作通常需要更少的CPU周期,例如1、整型比字符操作代价更低,因为字符集和校对规则是字符比较比整型比较更复杂。2、使用m

2021-09-01 18:20:51 124

原创 多线程与高并发(二)--volatile与CAS

一、 volatile关键字volatile 关键字,使一个变量在多个线程间可见。特性1:保证线程的可见性举个例子/** * volatile 关键字,使一个变量在多个线程间可见 * A B线程都用到一个变量,java默认是A线程中保留一份copy,这样如果B线程修改了该变量,则A线程未 必知道 * 使用volatile关键字,会让所有线程都会读到变量的修改值 ** 在下面的代码中,running是存在于堆内存的t对象中 * 当线程t1开始运行的时候,会把running值从内存中读

2021-08-28 18:13:27 200

原创 mysql调优(一)--性能监控

一、mysql的基础架构思维导图架构图

2021-08-26 21:29:08 486

原创 多线程与高并发(一)--线程的基础概念

一、什么是线程?一个程序里不同的执行路径就是一个线程,是进程里面最小的执行单元。例子:public class test { private static class T1 extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { try { TimeUn

2021-08-25 17:57:13 144

原创 json和对象以及字符串之间的转换总结

最近一直和json打交道,下面对json和字符串以及对象之间的转换进行总结1.java对象转json对象第一步.导包 import net.sf.json.JSONObject; <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib...

2019-08-23 15:54:09 239

cglib-jar.zip

Cglib 代理模式-代码配套资料

2021-10-27

空空如也

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

TA关注的人

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