4 小白不菜、

尚未进行身份认证

我要认证

目前在华中科技大学读研究生。微信公众号:编程技术园;个人网站:http://hellofriend.top 欢迎来访!

等级
TA的排名 14w+

一文带你搞懂工厂设计模式

什么是工厂设计模式?对象都需要创建,如果创建的时候直接 new 该对象,就会对该对象严重耦合。假如我们要更换对象,所有 new 对象的地方都需要修改一遍,显然违背了软件设计的开闭原则(OCP)。如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的。工厂模式最大的优点就是:解耦。三种工厂设计模式的使用1. 简单工厂设计模式定义:一个工厂方法,依据传入的参数,生成对应的产品对象;角色:抽象产品类具体产品类

2020-06-21 14:03:52

一文带你搞懂单例设计模式

什么是单例设计模式?单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类只有一个实例。即一个类只有一个对象实例。在Java语言中,单例带来了两大好处:对于频繁使用的对象(数据源、Session工厂),可以省略创建对象所花费的时间,这对于重量级的对象而言,是非常可观的一笔系统开销。由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。具体实现需要:(1)将构造方法私有化,使其不

2020-06-17 23:26:51

Nginx工作原理(Master+Worker)

原理Nginx 采用的是多进程(单线程) & 多路IO复用模型。使用了 I/O 多路复用技术的 Nginx,就成了 “并发事件驱动” 的服务器。Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。master 进程能监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程。也就是说,Worker的工作方式是争抢。

2020-06-14 23:26:55

Nginx实现反向代理

反向代理我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实的服务器的IP地址。实例实现访问www.123.com访问到tomcat(端口为8080)的主页。步骤修改Windows的hosts文件,将自定义的域名和虚拟机的IP地址进行绑定。修改nginx.conf文件(在linux系统上安装的nginx)。启动nginx和tomcat(注意:一定要在linux中

2020-06-12 21:12:26

快速入门Nginx

1. Nginx简介1.1 什么是Nginx?Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,专门为性能优化而开发,有研究表明 Nginx 能支持 50000 个并发连接数。1.2 正向代理在客户端(浏览器)配置代理服务器,通过代理服务器对互联网进行访问。1.3 反向代理我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实的服务

2020-06-08 23:57:34

Java14了还不知道Lambda表达式?

更多知识,请移步我的小破站:http://hellofriend.top

2020-06-03 23:41:18

MySQL之截取查询分析

更多知识,请移步我的小破站:http://hellofriend.top慢查询日志MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。(默认关闭)具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条s.

2020-06-01 23:23:43

MySQL之排序分组的索引优化

更多知识,请移步我的小破站:http://hellofriend.top排序优化ORDER BY子句,尽量使用Index方式(索引)排序,避免使用FileSort方式(手工)排序。技巧:无过滤,不索引;顺序错,必手工排序;方向反,必手工排序;要想Order BY使用到索引,必须要添加过滤条件(where子句对索引中的字段进行过滤,而且必须按照顺序),Limit分页也行。在SQL语句中的顺序一定要和定义索引中的字段顺序完全一致。要么全升序、要么全降序。有升有降无法使用索引。案例SE.

2020-05-30 20:22:33

MySQL之索引查询优化

1. 单表查询优化注意使用复合索引的效果会大于使用单个字段索引(但是要注意顺序)。查询条件时要按照索引中的定义顺序进行匹配。如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描存储引擎不能使用索引中范围条件右边的列,范围查询的列在定义索引的时候,应该放在最后面。mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描。is not nu

2020-05-28 00:32:04

超详细的MySQL性能分析(Explain)

1. 概述使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。通过Explain,我们可以获取以下信息:表的读取顺序哪些索引可以使用数据读取操作的操作类型哪些索引被实际使用表之间的引用每张表有多少行被物理查询2. 怎样获取SQL语句的执行计划?Explain + SQL语句举例EXPLAIN SELECT * FROM USER;执行计划所包含的信息3. 执行计划各个名词字段的解

2020-05-26 13:26:56

常用的NoSQL数据库一览

Memcached优点很早出现的NoSQL数据库。数据都在内存中,一般不持久化。支持简单的key-value模式。一般作为缓存数据库辅助持久化的数据库。Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。支持直接配置为session handle。缺点只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。无法进行持久化,

2020-05-25 00:03:23

编写Dockerfile自定义镜像

更多知识,请移步我的小破站:http://hellofriend.top要求编写一个Dockerfile自定义centos镜像,要求在容器内部可以使用vim和ifconfig命令,并且登入落脚点为/usr/local。编写DockerfileFROM centosMAINTAINER moti<373675032@qq.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y ins.

2020-05-24 00:07:00

一文带你认识Docker

Docker是什么?Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到 “一次封装,到处运行” 。Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致

2020-05-22 23:24:04

对象不再使用时为什么应赋值为null?

前言许多Java开发者都曾听说过 “不使用的对象应手动赋值为null” 这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回答不出来了。鉴于网上有太多关于此问题的误导,本文将通过实例,深入JVM剖析 “对象不再使用时赋值为null” 这一操作存在的意义。示例代码我们来看看一段非常简单的代码:public static void main(String[] args) { if (true) { byte[]

2020-05-15 22:08:04

DNS知识小结

概述DNS:Domain Name System通过域名去寻找到主机的真实IP地址,就是所谓的DNS服务。域名解析系统DNS多层命名服务器构成的分布式数据库应用层协议:完成名字的解析Internet核心功能,用应用层协议实现网络边界复杂DNS服务域名向IP地址的翻译主机别名邮件服务器别名负载均衡:Web服务器它是一种分布式层次式数据库的方式,从根目录开始,逐层往下查询的。例如www.baidu.com,会先找根服务器,找到com域名解析的服务器,然后从com域名解析的服务器

2020-05-14 13:44:53

SpringMVC执行请求的流程总结

概述SpringMVC框架是一个基于请求驱动的Web框架,并且使用了“前端控制器”模型来进行设计,再根据“请求映射规则”分发给相应的页面控制器进行处理。整体流程具体步骤:首先用户发送请求到前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图中的 1、2 步骤;页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在 Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托

2020-05-13 23:51:11

通俗讲解数据库索引

更多知识,请移步我的小破站:http://hellofriend.top前言提起索引我想你应该不陌生,当我们查阅一本大部头的时候我们应该如何快速的找到想要的内容呢?很简单,先找目录,通过目录我们就可以了解到我们要找的内容在书中的什么地方,而这个目录就担任着索引的功能。相同,数据库为了能快速的寻找到指定的数据必须要建立索引。对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加...

2020-05-07 14:05:31

深入剖析数据库底层设计

1. 前言说到数据库这个词,我只能用爱恨交加这个词来形容它。两年前在自己还单纯懵懂的时候进了数据库的课堂,听完数据库的课,觉得这是一门再简单不过的课程,任何一门编程语言都比SQL要晦涩难懂,任何一门理论课程都比数据库关系要复杂得多。直到从被面试官按在地上摩擦,到工作中那一条条令人发指的慢查询SQL,这就已经完全颠覆了我对数据库的看法。在有各种数据库工具的今天,我们是看不到那简单到不能再简单的一张...

2020-05-03 23:16:27

Java垃圾回收

之前听说有这么一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员。言归正传。确实,在 Java 的世界里,似乎我们不用对垃圾回收那么的专注,很多初学者不懂 GC,也依然能写出一个能用甚至还不错的程序或系统。但其实这并不代表 Java 的 GC 就不重要。相反,它是那么的重要和复杂,以至于出了问题,那些初学者除了打开 GC 日志,看着一堆01...

2020-04-29 23:03:49

Java的static关键字,超精炼

static用法static和final是两个我们必须掌握的关键字。不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构。这篇文章我们来了解一下static关键字及其用法。修饰成员变量在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员。p...

2020-04-27 12:55:32

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力探索
    原力探索
    参与《原力计划【第二季】——打卡挑战》的文章入选【每日精选】的博主将会获得此勋章。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 分享学徒
    分享学徒
    成功上传1个资源即可获取