自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wuhaifei

用心创造更好的文章

  • 博客(113)
  • 收藏
  • 关注

原创 随机对象生成器-EasyRandom

如何使用?引入maven依赖<dependency> <groupId>org.jeasy</groupId> <artifactId>easy-random-core</artifactId> <version>4.3.0</version> <exclusions> <!-- 跟 SpringAOP 引入的 objenesis 有冲突,要排除 --&g

2021-08-26 11:07:30 2054

原创 解决TOP-K问题:快速选择排序算法

1. 思想 Quick select算法通常用来在未排序的数组中寻找第k小/第k大的元素。 Quick select和Quick sort类似,核心是partition。 1. 什么是partition? 从数组中选一个数据作为pivot,根据每个数组的元素与该pivot的大小将整个数组分为两部分: 左半部分,都比pivot大,右半部分,都比pivot小 。 2. 用分治思路实现排序 pivotIndex 是pivot在数组的下标 pivotInde...

2021-08-05 16:23:02 593

原创 深入分析Java中的关键字static

在平时开发当中,我们经常会遇见static关键字。这篇文章就把java中static关键字的使用方法的原理进行一个深入的分析。先给出这篇文章的大致脉络:首先,描述了static关键字去修饰java类、方法、变量、代码块的方法然后,从底层分析static关键字,接下来,给出static的一些使用场景和案例最后,对static进行一个总结,包括和普通变量的区分。OK,开始今天的文章。一、static关键字的基本用法1、static关键字基本概念我们可以一句话来概括:方便在没有创建对象的情况下

2021-08-05 16:14:00 409

原创 java继承之构造函数哪些事儿

1.为什么在创建子类对象的时候会调用父类的构造函数?public class Sub extends Super{ public Sub() { System.out.println("Sub"); } public static void main(String[] args) { Sub s = new Sub(); }}class Super { String s; public Super() {

2021-03-31 13:25:55 234

原创 IDEA常用快捷键

1、进入/返回方法快捷键Ctrl+B 进入光标所在方法定义的地方或返回该方法被使用的地方(代替Ctrl+鼠标点击方法进入方式,避免了手指在键盘和鼠标之间切换,非常好用的快捷键)Ctrl+Alt+B 进入子类或子方法定义的地方,Ctrl+F12 查看当前类的所有方法Ctrl+H 显示该类继承关系结构图Ctrl+Q 显示类/方法/变量上的doc注释说明2、光标定位及选中快捷键Ctrl+Alt+Left/Right 光标定位到...

2021-03-09 14:07:09 541

原创 Maven Helper插件查找和排除JAR包的依赖关系

前言 :起一个新的项目经常会有maven依赖冲突,有时候很难找到jar依赖关系,这个时候就很想有一个靠谱的软件帮助我们了,maven helper就是很好的工具。正文:基于Maven依赖创建的Spring项目,经常会引入多方的依赖JAR包,而多方的依赖JAR包中也会依赖其它相关的JAR包,很容易造成JAR包之间冲突。解决的工具 Maven Helper:1、在idea中安装Maven Helper插件:2、安装完重启idea,会发现打开对应的pom.xml文件会多了一个...

2021-03-09 13:52:30 692

转载 Java基础之—反射(非常重要)

反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

2021-03-04 11:48:05 184 1

原创 gitlab的密钥配置

一、背景当前很多公司都选择git作为代码版本控制工具,然后自己公司搭建私有的gitlab来管理代码,我们在clone代码的时候可以选择http协议,当然我们亦可以选择ssh协议来拉取代码。但是网上很少找到如何用git客户端生成ssh key,然后配置在gitlab,我当时在做的时候苦于摸索,后来终于找到了解决方案,那么本文,我们就来聊一聊如何本地git客户端生成ssh key,然后配置在gitlab里,而后使用ssh协议进行提交和拉取git远程仓库的代码。二、配置一个ssh-key 打开本地g

2021-02-24 10:12:29 6978

原创 常用数据结构-栈

栈的定义栈是一种特殊的线性表,仅允许在表的一端进行插入和删除运算。这一端被称为栈顶(top),相对地,把另一端称为栈底(bottom)。向一个栈插入新元素又称作进栈、入栈或压栈(push),它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈(pop),它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。所以栈具有“后入先出”的特点(LIFO)。栈的存储结构顺序存储于链式存储都能实现一个栈,其中顺序存储的形式大概是这样:一般的,把数组的第一个位置[0]作为栈

2021-02-03 16:22:32 211

原创 常用数据结构-队列

队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的端是队尾,允许删除的端是队头。所以说队列是一个先进先出的线性表,相应的也有顺序存储和链式存储两种方式。顺序存储就是用数组实现,比如有一个n个元素的队列,数组下标0的一端是队头,入队操作就是通过数组下标一个个顺序追加,不需要移动元素,但是如果删除队头元素,后面的元素就要往前移动,对应的时间复杂度就是O(n),性能自然不高。为了提高出队的性能,就有了循环队列,什么是循环队列呢?就是有两个指针,front指向队头,

2021-02-03 13:55:52 691

原创 常用数据结构-堆

堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。堆的常用方法:构建优先队列 支持堆排序 快速找出一个集合中的最小值(或者最大值) 在朋友面前装逼堆属性堆分为两种:最大堆和最小堆,两者的差别在于节点的排序方式。在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。这就是所谓的“堆属性”,并且这个属性对堆中的每一个节点都成立。例子:这是一个最大堆,,因为每一个父节.

2021-02-02 20:25:11 202

原创 常用的数据结构-树

树(Tree)的基本概念树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。二叉树每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的性质1.若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0)2.高度为k的二叉树最多有2^(k+1) - 1个结点

2021-02-02 15:10:38 374

原创 如何实现一个高效的单向链表逆序输出?

示例:以逆序A->B->C->D为例,图示如下java实现public void reverseLinkList() { //逆序输出链表的所有内容if (head == null || head.getNext() == null) { //当链表只有一个头节点或者只有一个结点,逆序还是原来的链表,所以直接返回 return;} else { Node p = head.getNext(); Node q = head.getNext().getNext()

2021-01-19 19:55:02 269

原创 java的HashMap知多少

首先,我们需要知道HashMap的底层实现是数组、链表、红黑树。HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快 的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为 null,允许多条记 录的值为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导 致数据的不一致。如果需要满足线程安全,可以用 Collections 的 synchronizedMap 方法使 H

2021-01-17 18:56:42 98

原创 浅谈Java 垃圾回收机制与几种垃圾回收算法

一、如何确定某个对象是“垃圾”?我们先了解一个最基本的问题:如果确定某个对象是“垃圾”?既然垃圾收集器的任务是回收垃圾对象所占的空间供新的对象使用,那么垃圾收集器如何确定某个对象是“垃圾”?通过什么方法判断一个对象可以被回收了。在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。不失一般性,如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对

2021-01-17 13:02:55 207

原创 Redis持久化机制,优缺点,如何选择合适方式

1 什么是Redis持久化?持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。2 Redis 的持久化机制是什么?各自的优缺点?Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制:RDB:是Redis DataBase缩写快照RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump...

2020-03-26 11:51:25 342

原创 数据库的分库分表思想,高级工程师必备

前言关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维 度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容无非就是数据切分(Sharding),以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个...

2020-03-04 19:35:47 219

原创 面试必问题-乐观锁和悲观锁

前言在学习异步的时候,经常会听到锁的概念,常见的锁有行锁,表锁,读写锁等。但是这些锁属于乐观锁还是悲观锁呢?什么是乐观锁以及悲观锁呢?什么时候用乐观锁以及悲观锁呢以及使用它们所带来的问题有哪些呢?本文带你深入研究一下这两种锁,也是程序员面试必备的技能。正文悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿...

2020-03-03 10:54:40 162

原创 爸妈再也不用担心我抢不到票了

前言最近在github上闲逛,发现一个用python写的很不错的抢票系统,据说,比12306好用哦并且抢票速度也是非常快的。话不多说,马上就教大家如何一步步使用。各位小伙伴,年尾将至还在为了买一张回家的高铁票,花大把的冤枉钱一下开个VIP、极速、光速嘛?这是基于jupyter运行和docker运行的,不过其他编辑器运行应该也差不多,配置过程是一样的。在jupyter notebook运行%ru...

2020-03-01 12:52:28 308 1

原创 PHP实时消息推送,你在用websocket吗?

前言最近在学习websocket协议,就基于websocket实现了实时消息推送的功能。正文什么是WebSocketWebSocket用于在Web浏览器和服务器之间进行任意的双向数据传输的一种技术。WebSocket协议基于TCP协议实现,包含初始的握手过程,以及后续的多次数据帧双向传输过程。其目的是在WebSocket应用和WebSocket服务器进行频繁双向通信时,可以使服...

2020-02-28 17:27:25 454

原创 给女朋友通俗易懂的讲解微服务架构

前言微服务架构在最近几年越来越火,离不开架构本身的分工明确,很好的解决了代码的重用问题,让开发效率更高。正文本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独...

2020-02-28 15:23:07 658 3

原创 架构之路-微服务

前言要想成为一名优秀的机构师,掌握微服务是必不可少的,那什么是微服务呢?使用微服务有什么好处?下面带大家来了解这个被越来越多人使用的东西。正文什么是微服务微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。一.单体架构1.1什么是单体架构在软件设计的时候经常提到和使用经典的3层模型,即表现层,业务逻...

2020-02-28 14:12:22 108

原创 php怎么发送请求你知道吗

前言前端可以发送请求,后端也可以,php里的curl提供了这个操作,下面是我封装的curl,支持post和get方式,大家觉得写得还不错可以直接拿来用哦正文private static function doCurl($url, Array $data = [], $isPost = 0, $header = [], $timeOut = 25, $cookie = '') { ...

2020-02-26 18:32:55 133

原创 laravel 使用路由api.php

前言laravel框架是我们常用的框架,前后端分离趋势下api.php的用途越来越大。话不多说,下面实战带大家熟悉他。正文1) 在 文件中: routes/api.php添加:Route::get('fei', 'FeiController@index'); Route::get('/hello', function () { return 'world';...

2020-02-26 18:00:48 4471 1

原创 mysql的安装

前言上班第一天,在公司电脑搭建各种开发环境以及软件,mysql的安装是必不可少的,下面就讲解一下mysql的安装。正文一、下载MySQL首先,去数据库的官网http://www.mysql.com下载MySQL。点击进入后的首页如下:然后点击downloads,community,选择MySQL Community Server。如下图:滑到下面,找到Recomme...

2020-02-24 19:07:30 230

原创 mysql和pgsql的选择

前言如果打算为项目选择一款免费、开源的数据库,那么你可能会在MySQL与PostgreSQL之间犹豫不定。MySQL与PostgreSQL都是免费、开源、强大、且功能丰富的数据库。你主要的问题可能是:哪一个才是最好的开源数据库,MySQL还是PostgreSQL呢?该选择哪一个开源数据库呢?在选择数据库时,你所做的是个长期的决策,因为后面如果再改变决定将是非常困难且代价高昂的。你希望一开始...

2020-02-22 10:28:10 1314

原创 我们该选择workman还是swoole呢?

前言 php的基于socket的异步框架有哪些呢?我目前见过的就两种,一种是workman框架,一种是基于swoole开发出来的框架。那么两种我们该选择那种呢?正文workermanworkerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用...

2020-02-19 11:51:26 2355

原创 php常见的三种框架比较

前言 最近在网上查了一下php的最常用的三种框架tp,laravel,yii2的资料并结合自己的理解总结一下三种框架的优缺点,话不多说请看正文。正文 yii2: 优点:gii蛮不错的,简化了开发流程,可以生成绝大数的代码,开发后台等效率还是蛮高的 缺点:前后端完全的分离的趋势下,yii2前后端的耦合的还是有些重了 laravel:...

2020-02-19 11:02:10 1077

原创 吴大仙带你三分钟学会swoole框架

前言最近在学习swoole这个东西,就写点心得吧。基于swoole的开源框架很多,优缺点自己百度,凡是有用到websocket和消费队列选择基于swoole的框架是不错的选择。好吧话不多说,吴大仙就介绍一下swoole的一个简单入门吧正文swoole有两个部分。 一个是PHP扩展,用C开发的,这是核心。 另一个是框架,像yii、TP、Laravel一样,是PHP代码写的。swool...

2020-02-14 12:46:03 624 1

原创 学了框架这么久,你知道laravel与tp的区别的吗?

前言 因为疫情原因,电话面试某扑上市公司,被问到laravel和tp的区别,突然被问这个问题有点措不及防,个人回答的不算太好只答了中间件。面试结束之后查了资料,才发现大部分都知道有用过,临时太紧张了真的想不起来。也是希望各位小伙伴不要轻视基础问题,对每个知识点要多加留意。准备好,面试才会从容不迫。正文1、TP框架:ThinkPhp简单、快速,基于MVC和面向对象,易用性...

2020-02-06 15:32:23 2650 1

原创 面试官问你php协程,你要这样告诉他

多任务 (并行和并发)在讲协程之前,先谈谈多进程、多线程、并行和并发。对于单核处理器,多进程实现多任务的原理是让操作系统给一个任务每次分配一定的 CPU 时间片,然后中断、让下一个任务执行一定的时间片接着再中断并继续执行下一个,如此反复。由于切换执行任务的速度非常快,给外部用户的感受就是多个任务的执行是同时进行的。多进程的调度是由操作系统来实现的,进程自身不能控制自己何时被调度,也就是说...

2020-02-06 11:52:19 323

原创 分享个人对多进程和多线程的理解

php开发需要了解进程和线程,因为也会遇到多线程的开发。那什么是进程和线程呢?一起来唠唠吧。内容概要:1、什么是进程2、什么是线程3、进程和线程的关系4、php编程常见的进程和线程一、什么是进程进程是程序执行是的一个实例,进程能够分配给cpu和内存等资源。进程一般包括指令集和系统资源,其中指令集就是你的代码,系统资源就是指cpu、内存以及I/O等。二、什么是线程...

2020-02-06 11:35:31 228

原创 什么是php多线程?

PHP在默认的情况下是不支持多线程的,通过安装pthreads扩展,让其参数来指定编译PHP的线程安全方式来使其支持多线程,但是使用的过程中要考虑到线程安全的问题线程是操作系统中进行运算调度的最小单位。它被包含在进程中,是进程中的实际运作单位。今天将要分享的是线程知识是有关于PHP的,具有一定的参考价值,希望对大家有所帮助多线程的理解所谓多线程就是在在一个进程中可以并发多个线程,...

2020-02-06 11:25:44 1865

原创 php常用的扩展组件

1)ZendGuardLoader用优化代码的方法来提高php应用程序的执行速度;PHP源码加密;2)ioncube_loadersPHP源码加密;3)php-imagick、php-gmagick图片处理,功能强于GD库4)php-memcached、php-redis数据库缓存,需要调整代码结构5)xcachePHP缓存,不需要调整代码一般会选择xcache+...

2020-02-05 20:22:22 582

原创 WebSocket协议?你了解多少?

我们一直使用的http协议只能由客户端发起,服务端无法直接进行推送,这就导致了如果服务端有持续的变化客户端想要获知就比较麻烦。WebSocket协议就是为了解决这个问题应运而生。WebSocket协议,客户端和服务端都可以主动的推送消息,可以是文本也可以是二进制数据。而且没有同源策略的限制,不存在跨域问题。协议的标识符就是ws。像https一样如果加密的话就是wxs。简单实例客户端代码...

2020-02-05 20:08:06 219

原创 Rocketmq原理

一、 MQ背景消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。主要具有以下优势:削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统)蓄流压测(线上有些链路不好压测,可以通过堆积一定量消...

2020-02-05 19:39:10 1656

原创 redis的watch命令?

前言 面试了一家上市公司,他们问我redis的watch命令是什么意思,当场就蒙了,redis命令数据类型,get,set这些常见的命令知道,但是watch这个命令一时忘了是什么意思?好尴尬,好吧,就是菜。正文watch 用于在进行事务操作的最后一步也就是在执行exec 之前对某个key进行监视如果这个被监视的key被改动,那么事务就被取消,否则事务正常执行.一般在...

2020-02-05 18:21:53 1006

原创 区块链前世今生和三个感性故事

区块链前世今生比特币起源说到区块链不得不说比特币,比特币是在什么样的背景下产生的?2008年全球金融危机,世界各国央行滥发货币通货膨胀。就当时有人用“中本聪”的化名发表了一篇《比特币:一种点对点电子现金系统》的论文,描述了比特币的运行原理和模式。200...

2020-02-05 14:25:04 1840

原创 如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他

01、前言Emoji 在我们生活中真的是越来越常见了,几乎每次发消息的时候不带个 Emoji,总觉得少了点什么,似乎干巴巴的文字已经无法承载我们丰富的感情了。对于我们开发者来说,如何将 Emoji 存入 MySql 数据库或者取出来,就变成了一种必须掌握的技能了。Emoji 是一种图形符号,能够很直观地反应出某种文字含义。它让我想起远古时代的象形文字。Emoji 其实是一个日语词(え...

2020-02-05 11:06:27 146

原创 如何处理负载、高并发?

答:从低成本、高性能和高扩张性的角度来说有如下处理方案:1、HTML静态化其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。2、图片服务器分离把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如骑牛等3、数据库集群和库表散列及缓存数据库的并发连接为...

2020-02-04 15:55:20 1837

空空如也

空空如也

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

TA关注的人

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