- 博客(32)
- 收藏
- 关注
原创 设计模式一
工厂模式优点1.创建对象只需要知道其名称2.增加产品只需要添加对应产品接口的子类,对其他产品没有影响3.对调用者屏蔽了类的具体实现过程缺点每次增加一个产品时都需要添加新的产品子类并修改实例化工厂,既增加了系统复杂度又增加了类之间的耦合性。实现/** * 创建一个接口 */interface Car{ void run();}/** * 创建具体的实现类 */class BaoMa implements Car{ @Override public vo
2021-07-01 16:31:15 153
原创 数据库四种隔离级别
数据库四种隔离级别读未提交读未提交是指一个事务可以读到另一个事务未提交的数据,这种隔离级别的并发性最高,但是会出现“脏读”,导致一个事务可能读到另一个事务回滚的数据,如下图所示除非有特殊需求,一般不会使用这种隔离级别。读提交读提交是指一个事务只能读到另一个事务提交的数据,这是大部分数据库默认的隔离级别(MySQL不是),这种隔离级别保证了数据库不会发生“脏读”,但是会出现“不可重复读”,如下图所示事务1第一次查询出结果后,事务2对事务1中查询的记录行做了修改,导致事务1再一次执行同样的查询语
2021-06-29 14:35:58 539
原创 HDFS写数据流程
一、文件的写入客户端启动,建立一个Distributed FileSystem模块向NameNode请求上传文件,NameNode检查文件是否存在,父目录是否存在。NameNode检查完毕时候返回是否可以上传文件。客户端请求第一个Block上传到哪几个DataNode服务器上。NameNode返回需要上传的DataNode。比如node1,node2,node3。客户端通过通过FSDataOutputStream模块请求node1上传数据,node1收到请求会继续调用node2,然后node2
2020-08-12 16:34:43 186
原创 ZooKeeper内部原理
一、ZooKeeper半数机制上文中我们说ZooKeeper集群一般采用奇数台服务器,这是为什么呢,答案就是文章开头那一句,ZooKeeper集群在一半以上服务器数量可用时集群可用,举个栗子,当服务器数量是三台时,最多允许一台服务器挂掉,当服务器数量是四台时,也最多允许一台服务器挂掉,也就是说,三台服务器和四台服务器的容灾情况是一样的,为了节省成本,我们一般使用奇数。二、ZooKeeper的选举机制我们知道ZooKeeper中只包含一个Leader节点,但是这个Leader节点是怎么产生的呢,答案是大
2020-08-11 16:13:33 188
原创 Zookeeper基础
一、概述什么是ZooKeeper呢,官方给的说明是:ZooKeeper是一个开源的分布式的、为分布式应用提供协调服务的Apache项目。至于什么是ZooKeeper,从设计模式来说,它是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据发生变化,ZooKeeper就将负责通知已经在ZooKeeper上注册的那些观察者做出相应的反应。因为ZooKeeper是一个分布式框架,所以大多数情况下,我们使用ZooKeeper都是在集群模式下。Zo
2020-08-11 10:31:34 227
原创 JAVA的垃圾收集机制
一、垃圾收集算法1.1、标记-清除算法标记-清除算法是最基础的收集算法,算法分为“标记”、“清除”两个阶段,首先标记出所有需要回收的对象(使用可达性分析算法),再标记完成后统一收回,这是最简单的垃圾回收算法,同时也是后续算法的基础,后续的收集算法都是基于这种思路并对其的不足之处加以改进,算法执行过程如图:回收前状态:回收后状态:由上图可以看出,此算法在执行后可能会造成大量内存碎片,有可能导致后续分配大对象是无法找到最够的连续空间而导致触发另一次的垃圾收集,同时标记和清除两个阶段的效率都不高,造
2020-07-31 10:36:51 186
原创 @ConfigurationProperties注解的作用
@ConfigurationProperties注解的作用和@Value类似,都是获取配置文件中相应的配置值,但是@ConfigurationProperties与@Value不同的是,@Value一次只能获取一个值,但是@ConfigurationProperties可以获取多个值,例如,有如下配置:my: test: name: lisi age: 21我们使用@ConfigurationProperties就可以这么获取:@ConfigurationProperties(pr
2020-07-16 14:26:18 4221
原创 NIO实现简单的服务端-客户端通信
//服务端import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;
2020-06-03 20:02:39 171
原创 Java构建大顶堆
import java.util.ArrayList;import java.util.List;/** * 大顶堆 * @author 23365 * */public class BigHeap { public int[] data; public BigHeap() { } /** * 新建堆 * @param bigHeap * @param Nodes */ public static void init(BigHeap bigHeap,i
2020-05-29 20:59:53 746
原创 MySQL开启慢日志分析
在进行SQL优化的时候,慢日志分析是一个很好的方法,它可以自动把超过设定阈值的SQL语句保存在日志中,MySQL开启慢日志分析的方法如下。输入:show VARIABLES like ‘%slow_query_log%’如果显示slow_query_log:OFF则未开启(我已经开启了,显示ON)第二行数据表示日志位置输入: set global slow_query_log=1;开启慢日志分析。输入:show VARIABLES like ‘long_query_time%’;查看当前设置
2020-05-28 19:23:12 175
原创 MySQL——order by 与 group by分析
order by索引排序使用order by的时候最好使用索引进行排序,避免使用FileSort方式排序。使用索引排序的情况索引:idx_table_c1_c2_c21、order by语句使用索引满足最佳左前缀法则(order by c1或者order by c1,c2等等)2、使用where子句与order by子句条件组合满足最佳左前缀法则(where c1=‘c1’ order by c2,c3)文件排序必须使用FileSort的情况。FileSort有两种算法1、双路排序My
2020-05-28 17:45:18 287
原创 MySql——Explain关键字
做MySQL性能优化的时候第一步就是使用Explain关键字查看执行计划,让我们知道MySQL是如何执行我们的SQL语句的,从而我们可以根据这个对我们的SQL语句进行优化。Explain能干嘛1、查询表的读取顺序2、查询数据读取操作的操作类型3、哪些索引可以被使用4、哪些索引实际被使用5、表之间的引用6、每张表有多少行被优化器优化使用使用Explain关键字很简单只需要在SQL语句前加入Explain即可比如:explain select title from article可以得到:
2020-05-28 12:44:57 262
原创 MySql索引简介
是什么索引?MySQL官方对索引的描述为:索引是一种帮助MySQL高效获取数据的数据结构。从官方的描述种,我们可以看出,索引是一种数据结构。其实我觉得索引本质上就是一组MySQL帮我维护的有序数据结构,这些数据结构是一种指针,可以指向数据。因为索引是有序的,所以我们查找索引比直接查找数据快得多。优势索引的优势不必多说,当我们的数据量特别大的时候,一个较好的索引能大大降低我们的检索时间,可以类比字典的目录,没有目录的话,我们找一个字就得一个一个对比。另外因为索引是有序的,所以我们进行排序的时候索引也能
2020-05-27 21:45:16 111
原创 Redis的主从复制
什么是Redis主从复制主从复制就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。主从复制能干嘛1、读写分离现如今的的软件不论是c/s或者是b/s架构,都必须考虑高并发的问题,在并发量特别大的情况下,数据库会承担很大的压力,读写分离的思想就是,我们有不同的数据库,一些用来写数据,一些用来读,使得这种压力分散开,而redis的主从复制可以让主库的数据复制到从库,这样就可以做到主写从读,做到了读写分离2、容
2020-05-27 15:46:51 183
原创 Jedis连接池
import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public class JedisPoolUtil { //被volatile修饰的变量不会被本地线程缓存,而是直接操作内存数据 private static volatile JedisPool jedisPool = null; public s
2020-05-27 10:05:30 106
原创 Redis持久化
Redis是一种内存数据库,数据存在内存中,但是内存中的数据往往是不能长久保存的,为了能够使Redis像关系型数据库那样长久话保存数据,Redis提供了持久化机制。RDBRDB机制就是将内存中的数据集快照存入磁盘,恢复时会自动从磁盘中读取快照信息。原理RDB就是创建一个子进程进行持久化,持久化时会先将数据写入一个临时文件中,持久化完成后再将持久化文件替换上一个持久化文件。在持久化过程中,主进程不进行io操作,所以性能比较好。配置Redis默认的配置就是...
2020-05-26 13:07:20 151
原创 CAP理论
现在分布式系统应用的非常广泛,我自己也在学习分布式方面的知识,在分布式学习中,CAP理论应该是分布式入门的一个起点,所以我想就我现在学到的知识谈一谈对CAP的认识什么是CAPC:Consistency(强一致性)A:Availability(可用性)P:Partition tolerance(分区容错性)所谓强一致性也就是说在分布式系统中,当一个节点的数据发生改变,其余节点的都要同时进行备份。可用性指的是当一部分节点出现问题(宕机等),另外的节点仍然可以响应用户的请求。了解分区容错性我们先讲分
2020-05-25 19:22:57 156
原创 Java代理机制
Java代理模式,就是通过代理对象来访问目标对象,扩展目标对象的功能,比如:当你的项目以及写完了,但是突然要求新增一个功能,在每个业务操作前去判断权限,如果直接修改源代码的话,就会很麻烦,甚至破坏业务结构,这时候使用代理来扩展功能就很合适。静态代理静态代理就是写一个接口或者父类,让代理对象和目标对象都实现这个接口或者继承这个父类,然后调用相同的方法,这里其实就是对Java多态思想的应用。//公用的接口public interface StaticBiz { public void say();}
2020-05-25 12:00:45 142
原创 HTTP/1.0、HTTP/1.1、HTTP/2.0版本的区别以及HTTPS
tcp/ip要了解HTTP的话我们不得不提一下tcp/ip协议tcp/ip协议就是利用ip进行计算机间通信的协议群的总称,HTTP是tcp/ip协议里面的子集,HTTP通信的建立,包括我们熟悉的三次握手四次挥手等,都是建立tcp连接时的机制,关于tcp/ip网上有很多资料,这里不做扩展。HTTPhttp协议的是一种建立在请求响应模式下的,用于客户端与服务端进行通信的协议,其主要特点有:1、基于请求响应模式,即客户端发送请求服务器响应请求。2、HTTP是不保存状态的协议,也就是说当客户端完成一次请
2020-05-24 11:37:04 978
原创 一个基于springboot和微信小程序的点餐系统
项目简介:一个点餐系统,客户端使用微信小程序实现点餐、查询订单、咨询客服等功能。服务端使用springboot构建的web网站,实现对菜品的添加、修改,工作人员的招聘、修改职务、解聘,同时可以与客户实现在线交流,处理客户的问题。开发环境JDK1.8MySQL5.6主要技术SpringBootLombokMySQLMongoDBMyBatisKafkaWebSocketFreemarkervuelayui微信小程序开发基本功能下单与接单菜品管理员工管理.
2020-05-20 11:58:27 3628 7
原创 hadoop内存调优
最近服务器内存老是卡爆,主要是hadoop太吃内存了找了点资料给hadoop内存调优一下:在hadoop.env.sh中修改:export HADOOP_PORTMAP_OPTS="-Xmx256m $HADOOP_PORTMAP_OPTS"export HADOOP_CLIENT_OPTS="-Xmx256m $HADOOP_CLIENT_OPTS"在yarn-env.sh中修改JAVA_HEAP_MAX=-Xmx268m我是自己使用所以内存调的比较小,大家可以根据需要自己调节内存大小
2020-05-13 13:27:53 779
原创 记录一次Kafka启动失败error='Cannot allocate memory'
今天启动kafka的时候使用命令启动之后发现jps没有kafka进程,打开kakfa/logs下面的server.log发现有这么一个错误error='Cannot allocate memory'查看资料发现是卡夫卡启动时系统内存不足使用free -m发系统可用内存只有200多兆于是修改kafka-server-start.sh修改前: export KAFKA_HEAP_OPTS="-Xmx568M -Xms568M"修改后 export KAFKA_HEAP_OPTS="-Xmx1
2020-05-13 13:18:11 393
原创 idea出现org.apache.ibatis.binding.BindingException
最近项目出现org.apache.ibatis.binding.BindingException,网上找了很多办法,最后发现要在pom文件的加入<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes>
2020-05-11 18:03:50 219
原创 spring中使用websocket发现使用@Autowired报空指针
最近在使用springboot做一个客户通讯时采用了websocket,但是在注入一个service的时候老是报空指针,最后查阅资料发现是因为spring默认时单例的,当第一次创建时会初始化websocket,并为其注入属性,但是后续如果有新的websocket创建时,spring默认单例,便不在为其注入属性值,导致空指针,所以只要给属性加上staic,使其属于类private static U...
2020-05-07 14:21:51 510
原创 springboot整合freemarker
freemarker作为一种模板技术以及在很多项目中使用,最近项目需要整合springboot和freemarker,正好记录一下<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker<...
2020-04-27 22:36:54 121
原创 springboot整合mybatis并配置逆向工程
最近做一个springboot项目需要整合mybatis,简单记录一下整合过程新建一个springboot项目,然后在项目中添加对应的依赖<!--MySQL依赖--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</a...
2020-04-27 22:26:52 261
原创 爬取1688网站
最近在学习爬虫,写了一个爬取淘宝1688数据的爬虫,使用selenium与BeautifulSoup,现在简单记录一下# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.support import waitfrom selenium.webdriver.support import ex...
2019-11-03 10:33:49 1742 2
原创 python爬虫将对象序列化时出现maximum recursion depth exceeded while getting the str of an object
今天在做一个python爬虫时需要将获取的内容封装在一个个对象中,再将其存到redis里面,但是在做序列化时出现maximum recursion depth exceeded while getting the str of an object错误,从网上看说是递归层数设置太少,但是从新设置之后发现还是显示递归层数过多,百思不得其解,看到报错内容是获取字符串是递归层数太多,突然想到,自己的类的字...
2019-10-20 14:51:38 1714
原创 @ResponseBody返回内容乱码问题
在使用@ResponseBody注解时,返回内容有时会出现乱码问题,这时只要在@RequestMapping注解下添加属性produces="application/json; charset=utf-8"即可如图:
2019-10-13 15:37:45 251
原创 python实现常见排序算法
一、冒泡排序冒泡排序可以说是我们学习排序算法时最先学习的一种算法,冒泡排序的算法核心思想就是依次遍历需要排序的列表,比较相邻两元素的大小,将较大的元素放到后一位,较小的元素放到前一位,这样通过一次遍历,集合中最大的元素就位于列表的最后位置,一个包含n个元素的列表通过遍历n-1次,就可以获得排序后的列表,例如:一个列表中包含的元素为: 4 5 3 1 21,首先遍历列表,用index表示遍历的...
2019-10-12 22:57:40 192
原创 python爬虫入门(一)
python爬虫入门(一)由于学习的需要,最近学习了爬虫知识,学习之余把最近学习的知识进行整理方便以后查看,顺便和其他小伙伴一起交流学习爬虫的心得。1. 什么是爬虫如果把互联网比喻成一张蜘蛛网的话,那么各种硬件设施(服务器,pc机等)就是附着在这张蜘蛛网上的一只只蜘蛛,同时各种网络资源存放在不同的硬件设施中,而爬虫就是沿着这张蜘蛛网,到每一个硬件设施中找到自己需要的资源,将这些资源爬取到自己...
2019-10-11 17:34:35 313
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人