- 博客(26)
- 收藏
- 关注
原创 JAVA算法
1. 二分查找又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。 public static int biSearch(int []array,int a){ int lo=0; int hi=array.length-1; int mid; while(lo<=hi){ mid=
2021-08-16 14:28:34
1109
原创 数据库
1. 存储引擎1.1 概念数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated 。1.2 InnoDB(B+树)InnoDB 底层存储结构为B+树, B
2021-08-14 12:28:37
163
原创 负载均衡
负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。1. 四层负载均衡 vs 七层负载均衡1.1 四层负载均衡(目标地址和端口交换)主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。以常见的 TCP 为例,负载均衡设备在接收到第一个来自客户端的 SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标 IP 地址进行修改(改为后端服务器
2021-08-10 11:53:37
455
原创 建造者模式
1. 概述建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2. 实用范围当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。当构造过程必须允许被构造的对象有不同表示时。3. 角色在这样的设计模式中,有以下几个角色:builder:为创建一个产品对象的各个部件指定抽象接口。ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。Dire
2021-08-05 11:43:48
64
原创 单例模式
1. 概述单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。单例模式有三个要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。2. 实现方式通常单例模式在Java语言中,有两种构建方
2021-08-02 11:48:55
56
原创 抽象工厂模式
1. 概述抽象工厂模式相对于工厂方法模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。在抽象工厂模式中,客户端不再负责对象的创建,而是把这个责任丢给了具体的工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。并且当一系列相互关联的产品被设计到一个工厂类里后,客户端的调用将会变得非常简单,而且,如果要更换这一系列的产品,则只需要更换一个工厂类即可。如果客户端需要创建一些产品结构,而这些产
2021-08-01 11:40:19
86
原创 工厂方法模式
1. 概念工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。工厂方法模式对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂
2021-07-30 18:01:12
56
转载 设计原则
做什么事都需要遵循一些准则,设计模式也不例外。我们在设计一些设计模式时,一般遵循如下七项基本原则,它们分别是:单一职责原则 (Single Responsibility Principle)开放-关闭原则 (Open-Closed Principle)里氏替换原则 (Liskov Substitution Principle)依赖倒转原则 (Dependence Inversion Principle)接口隔离原则 (Interface Segregation Principle)迪米特法则(
2021-07-25 12:29:05
89
原创 Canssandra
1. 概念Apache Cassandra 是高度可扩展的,高性能的分布式 NoSQL 数据库。 Cassandra 旨在处理许多商品服务器上的大量数据,提供高可用性而无需担心单点故障。2. 数据模型Key Space(对应 SQL 数据库中的 database)一个 Key Space 中可包含若干个 CF,如同 SQL 数据库中一个 database 可包含多个 tableKey(对应 SQL 数据库中的主键)在 Cassandra 中,每一行数据记录是以 key/value 的形式存
2021-07-20 17:52:23
486
原创 MongoDB
1. 概念MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。...
2021-07-19 21:39:13
62
原创 Hbase
1. 概念base 是分布式、面向列的开源数据库(其实准确的说是面向列族)。HDFS 为 Hbase 提供可靠的底层数据存储服务,MapReduce 为 Hbase 提供高性能的计算能力,Zookeeper 为 Hbase 提供稳定服务和 Failover 机制,因此我们说 Hbase 是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。2. 列式存储列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。这里的列式存储其实说的是
2021-07-18 12:51:55
93
原创 RabbitMQ
1. 概念RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。具体特点包括:可靠性(Reliability):RabbitMQ 使用一些机制来保证可靠性,如持
2021-07-15 14:59:56
64
原创 日志
1. Slf4jslf4j的全称是Simple Loging Facade For Java,即它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如 JDBC 一样,只是一种规则而已。所以单独的 slf4j 是不能工作的,必须搭配其他具体的日志实现方案,比如 apache 的 org.apache.log4j.Logger,jdk 自带的 java.util.logging.Logger 等。2. Log4jLog4j 是 Apache 的一个开源项目,通过使用 Lo
2021-07-11 17:55:09
58
原创 网络多线程
1. Netty 原理Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。2. Netty 高性能在 IO 编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者 IO 多路复用技术进行处理。IO 多路复用技术通过把多个
2021-07-09 20:17:37
466
原创 微服务概述
1. 服务注册发现服务注册就是维护一个登记簿,它管理系统内所有的服务地址。当新的服务启动后,它会向登记簿交待自己的地址信息。服务的依赖方直接向登记簿要 Service Provider 地址就行了。当下用于服务注册的工具非常多 ZooKeeper,Consul,Etcd, 还有 Netflix 家的 eureka 等。服务注册有两种形式:客户端注册和第三方注册。1.1 客户端注册(zookeeper)客户端注册是服务自身要负责注册与注销的工作。当服务启动后向注册中心注册自身,当服务下线时注销自己。期间
2021-07-08 16:20:47
94
原创 Spring
Spring 原理它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。1. Spring 特点1.1 轻量级从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1M多的JAR文件里发布,并且Spring所需的处理开销也是微不足道的。此外,Spring是非入侵式的:典型的,Spring应用中的对象不依赖于Spring的特定类。1.2 控制反转Spring通过一种称作控制反转IOC的技术促
2021-07-08 12:45:59
2489
原创 JAVA 多线程并发
JAVA 多线程并发1. JAVA并发知识库进程:一个程序,QQ.exe Music.exe 程序的集合;一个进程往往可以包含多个线程,至少包含一个! Java默认有几个线程? 2个 mian、GC线程:开了一个进程 Typora,写字,自动保存(线程负责的)对于Java而言:Thread、Runnable、Callable Java真的可以开启线程吗? 开不了 public synchronized void start() { /** * Thi
2021-07-04 11:29:35
118
原创 Java 集合
Java 集合1.接口继承关系和实现集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。Collection:Collection 是集合 List、Set、Queue 的最基本的接口。Iterator:迭代器,可以通过迭代器遍历集合中的数据Map:是映射表的基础接口2. ListJava 的 List 是非常常用的数据类型。List 是有序的 Collection。Java List 一共三个实现类:分别是
2021-07-01 18:53:32
96
原创 JVM
JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。基本概念:JVM 是可运行 Java 代码的假想计算机 ,包括一套
2021-06-30 16:37:17
108
原创 安装vmware tools
安装vmware tools[root@localhost ~]# cd /[root@localhost /]# lsbin dev home lost+found misc net proc sbin srv tftpboot usrboot etc lib media mnt opt root selinux sys tmp var[root@localhost /]# cd /media[root@localhost media]# ls
2021-06-23 13:51:14
568
原创 json字段为null时,不显示
springboot @JsonInclude(JsonInclude.Include.NON_NULL)在springboot项目中,发送请求后得到响应回来的json,把它封装成某一class实体类,如果某一属性为空,在转化为json时,字段值为null的字段不显示。
2021-04-29 18:35:04
1864
原创 extends includes/layout.pug block content #recent-posts.recent-posts include includes/recent-posts.p
1、在hexo目录下打开git bash,输入命令:npm install --save hexo-renderer-jade hexo-generator-feed hexo-generator-sitemap hexo-browsersync hexo-generator-archive2、清除缓存hexo clean3、生成静态文件,查看效果hexo ghexo s...
2021-02-08 23:34:53
236
1
原创 Tyora+PicGo
Tyora+PicGo打开 PicGo 软件的设置界面,进行 Server 的设置:PicGo 设置 -> 设置 Server,开启 Server,监听地址不用进行更改,监听端口的值设置为 36677,这个值的获取在 Typora 软件中,下面会提到:接下来进行 Typora 的设置,Typora 的安装我就不说了,相信大家都会安装,打开 typora 软件,依次打开步骤为:文件 -> 偏好设置 -> 图像,具体配置参考下面的图中的配置:之后编辑Typora文件时图片得到上传
2021-02-08 23:21:34
80
原创 图床(github)
图床(github)新建仓库,点击进入Settings点击进入Developer settings进入Personal access tokens自定义命名复制好token在PicGo里进入GitHub设置,自定义域名:https://cdn.jsdelivr.net/gh/设定的仓库名然后试着上传图片...
2021-02-08 23:17:49
95
原创 SMMS图床配置
SMMS图床配置如果已经有 SMMS 账号的同学可以略过这一步smms 账号注册点击这里按要求填入信息即可,注册完成后去登录。获取 token登录完成需要去自己的信息面板获取 token,面板入口如下所示:进入PicGo图床设置>SM.MS图床>设定Token[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxkUB2Mk-1612796815917)(https://i.loli.net/2021/01/14/nGqL6YC7Rhkraep
2021-02-08 23:07:55
3724
1
原创 博客部署到github上
博客部署到github上打开github,新建github仓库,注意:用户部署个人博客的github仓库的命名必须符合特定要求才行(你的昵称+github.io)接下来需要在博客根目录下安装个插件:cnpm install hexo-deployer-git --save紧接着,将本地目录与 GitHub 关联起来,输入下面的命令行:ssh-keygen -t rsa -C "你的邮箱地址"输入后一直回车,然后在 C:/Users/[username] 目录下找到名为.ssh 的文件夹,
2021-02-08 23:02:27
367
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人