自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 mui和H5+构建的仿微信App

canary_chat一个仿微信的H5+应用,使用mui组件库来构建接近原生APP的应用。后端采用springboot + mybatis,使用netty搭建websocket服务器用于聊天功能。技术栈HTML/CSS/JavaScriptmui组件库H5+ API服务端canary_chat_after界面聊天列表聊天页面通讯录新的朋友发现个人信息好...

2020-01-19 09:29:26 393 5

原创 初始Netty原理(四)— 序列化

在开发一些远程过程调用(RPC)的程序时,一般都会涉及到对象的序列化和反序列化的问题(因为TCP或UDP这些低层协议只能传输字节流,所以应用层需要将Java POJO对象序列化为字节流才能传输)。对象的序列化方式有以下几种方式:JSON:将Java POJO对象转换成JSON结构化的字符串。一般用于Web应用和移动开发,可读性较强,性能较差。XML:与JSON一样,也是序列化为字符串,...

2020-01-05 10:08:32 86

原创 初识Netty原理(三)——解码和编码

在Netty底层读入的是ByteBuf二进制数据,在实际开发中,需要将它解码为Java的POJO对象,处理完业务后,需要将Java的POJO对象编码为ByteBuf二进制数据放进通道中进行传输。这里就需要使用到Netty的解码器和编码器。Decoder原理和使用原理Netty中的解码器都直接或间接地实现了入站处理适配器,所以在使用时,直接继承解码器就行,而不需要再去实现处理适配器。在继承解...

2020-01-05 10:07:53 77

原创 MySQL知识点总结(重点分析事务)

范式数据库三种范式如下。范式描述反例第一范式每个字段都是原子的,不能再分解某个字段是JSON串,或者是数组第二范式1) 表必须有主键,可以是多个顺序属性的组合。2) 非主属性必须完全依赖主属性(这里指的是组合主键),而不能部分依赖。好友关系表中,主键是关注人ID和被关注人ID,表中存储的姓名等字段只依赖主键中的一个属性,不完全依赖主键第三范式没有传递...

2019-12-28 23:54:34 139 1

原创 spring的AOP和事务

动态代理代理模式:给一个对象提供一个代理,并由代理对象来控制真实对象的访问(调用者并不知道真实对象是什么)。代理模式分静态代理和动态代理。这里只讨论动态代理,通俗的讲,动态代理就是在不修改代码的基础对被代理对象进行方法的增强。基于接口的动态代理JDK自带的动态代理就是基于接口的动态代理,被代理对象至少要实现一个接口,否则就无法使用代理。底层还是基于Java的反射来创建代理对象的。JDK动...

2019-12-21 21:49:51 72

原创 Mybatis入门

入门安装如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</ver...

2019-12-20 10:16:51 37

原创 HTTP协议知识总结

HTTP 1.0HTTP 1.0的问题HTTP 1.0中,每一个请求都要开一个连接,请求结束,断开连接。这样的协议有两个问题(1)性能问题:每次请求都打开一个新的连接,因为连接数有限,而且连接的建立和断开都很耗时(可能一个页面就会有几十个请求)。(2)服务器推送问题:服务器无法主动向客户端推送消息。Keep-Alive机制为了解决一个请求完成后连接立即断开的问题,引入了Keep-A...

2019-12-16 18:14:33 61

原创 Spring中的IoC容器

什么是IoC什么是耦合和内聚耦合指的就是模块之间的依赖关系。模块间的依赖越多,则表示耦合度越高,相应的维护成本就越高。内聚指的是模块内功能之间的联系。模块内功能的联系越紧密,则表示内聚度越高,模块的职责也就越单一。所以在程序开发中应该尽量的降低耦合,提高内聚。也就是设计原则中的开闭原则和单一职责原则。工厂模式工厂模式就是用来解决程序间耦合的一种设计模式。可以把所有要创建的对象放在工...

2019-12-14 18:16:07 279

原创 初始Netty原理 (二)

上文已经了解到了Netty中的启动器、反应器、通道、处理器、流水线,下面来了解一下Netty中较为重要的ByteBuf缓冲区。概念优势Pooling池化,减少了内存复制和GC,提升了效率。读写分开存储,索引也分开了,不需要切换读写模式。方法可链式调用,引入了引用计数法,方便了池化与内存回收。重要属性readerIndex(读指针):读取的起始位置,每读取一个字节,就加1,当它等...

2019-12-11 21:12:07 97

原创 分析堆栈信息封装一个SLF4J的静态类

前言当我们在使用日志框架的时候,每个类都要通过工厂方法获取一个日志对象来打印日志,感觉太麻烦了。所以想着去封装一个日志静态类。但是问题是封装的那个静态日志类打印出的类信息都是日志类自己,这肯定不是我们想要的啊,我们需要的是当前调用打印日志的这个类的信息啊。开始思考我们发现平时使用的Logback等日志框架能准确捕获源代码的所在的类、方法、行。但java并没有提供相应的方法,这似乎很神奇。其实...

2019-12-11 20:12:27 142

原创 初识Netty原理

第一个Netty实践DiscardServer创建Netty项目创建一个快速开始的Maven项目,导入Netty4.0版本的依赖(我的JDK是1.8,官方建议1.6以上)。Netty依赖如下:<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</ar...

2019-12-09 22:01:22 112

原创 Integer的自动装箱与拆箱

装箱和拆箱装箱:将基本数据类型转换成封装类型。拆箱:将封装类型转换成基本数据类型。自动装箱和自动拆箱在jdk1.5开始增加了自动装箱和自动拆箱机制,就是为了方便基本类型和封装类型之间的互相转换。下面来看看自动装箱(拆箱)和显示装箱(拆箱)的例子:Integer a1 = 3; // 自动装箱Integer a2 = Integer.valueOf(3); // 显示装箱i...

2019-12-06 10:20:36 95

原创 经典排序算法归纳

算法概述算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。算法复杂度相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。...

2019-12-05 12:52:48 52

原创 MySQL中的“锁”事

乐观锁和悲观锁乐观锁:类似Java中的CAS算法,每次读数据的时候都认为别人不会修改数据,所以不会上锁,只有在更新的时候去判断数据是否被修改过,一般都会使用版本号机制实现。悲观锁:类似Java中的synchronized和lock锁,每次都认为别人会修改数据,所以每次读数据时都会上锁,这样别人想修改数据时就会被阻塞。MySQL中的行锁,表锁等都是悲观锁。共享锁和排他锁在InnoDB存储...

2019-12-03 16:59:59 30

原创 Java中的锁事

Java的锁Java根据不同的特性来对锁进行分类,大概有以下分类方式。这里主要讨论乐观锁和悲观锁以及在Java中对应的实现。悲观锁 VS 乐观锁对于同一个数据的并发操作,悲观锁认为自己在使用数据时,一定会有其它线程来修改数据,所以在每次操作数据前都会加上一个锁,以确保没有其它线程来修改数据。Java中的synchronized锁和lock锁都是悲观锁。而乐观锁每次都认为不会有其它线程来...

2019-12-01 22:33:04 58

原创 InnoDB存储引擎的索引

概述InnoDB存储引擎目前支持以下索引B+树索引:关系型数据库总最常用和最为有效的索引哈希索引:优化器根据表的使用情况自动构建哈希索引(如果优化器觉得使用哈希索引效率更高),不能认为手动构建全文索引:使用倒排索引构建,实现将整篇文章中的任意内容快速查找出来。B+树索引关于B+树的实现,可见漫画算法:什么是B+树数据库中的B+树索引分为聚集索引和辅助索引,区别是叶子节点是否存放行...

2019-11-29 22:54:46 47

原创 对于Tomcat类加载器的一点思考

Tomcat的类加载器在启动Tomcat时,它将创建一组类加载器,并被组织为以下父子关系。类加载器使用顺序Tomcat为了实现一个基本的web容器,需要保证以下四点:一个容器中的不同应用程序之间的类可以相互隔离,也就是就算全限定名相同的两个类加载出来也需要是不一样的。一个容器中的不同应用程序之间可以互相共享类,也就是对于相同的类可以共享使用。对于容器的内部类,需要与应用程序隔离开,...

2019-11-28 22:21:14 31

原创 正则表达式匹配

题目描述请实现一个函数用来匹配包括’.‘和’ * ’ 的正则表达式。模式中的字符’.‘表示任意一个字符,而’ * '表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab * ac * a"匹配,但是与"aa.a"和"ab * a"均不匹配解题思路考虑为空的情况。如果字符串和模式都为空的话,那肯定是不...

2019-11-19 17:27:00 46

原创 中文情绪识别api

前言国庆的时候用LSTM搭建的了一个神经网络,训练微博数据集来进行情感多分类。后来觉得之前那个数据集不太行,所以经过大量的资料搜索,使用了当前这个数据集。数据集的提供方是清华大学计算机系黄民烈副教授。共4万多条句子,分为其他(Null), 喜好(Like),悲伤(Sad),厌恶(Disgust),愤怒(Anger),高兴(Happiness)六类。相对之前那个数据集更具权威性和准确性。通过Dj...

2019-11-16 20:18:49 602

原创 Redis的数据结构介绍

我们都知道Redis是用C语言编写的内存数据库。但是由于C几乎没有提供任何数据结构的封装,所以Redis为了实现更快,更安全的操作,自己在内部封装了一系列的数据结构。其中包括了简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表,下面来一一介绍(画的图有点丑。。)。简单动态字符串(SDS)SDS定义在redis中,只有字符串字面量才会用C字符串来表示(比如打印日志),其它都使用SDS来表...

2019-11-14 20:12:13 44

原创 三数之和

题目描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1...

2019-10-22 22:15:54 34

原创 滑动窗口问题——最小覆盖子串

题目描述给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。解题思路这是一个滑动窗口类题目。首先将要被覆盖的子串T加入到一个Ha...

2019-10-22 22:14:12 40

原创 基于LSTM的中文多分类情感分析

趁着国庆假期,玩了一下深度学习(主要是LSTM这个网络),顺便做了一个中文多分类的情感分析。中文情感分析相对英文来说,难度太大,所以最后分析的结果,准确度也不是太高,但基本还是没啥问题的。数据我的数据是来自github的一个项目:ChineseNlpCorpus 里面收集了蛮多用于自然语言处理的中文数据集/语料。下载地址: 百度网盘数据概览: 36 万多条,带情感标注 新浪微博,包含...

2019-10-08 14:08:30 1323 4

原创 Windows中启动rabbitmq主机名报错

记录一个被自己坑死的问题,,计算机名。。哥哥们千万不要命名为中文,,,会把自己坑死的,还不知道咋死的。今天在Windows安装rabbitMQ的时候,好像一切正常的样子。启动的时候,一直启动不了。emmm,报错:ERROR: epmd error for host neighbours:: nxdomain (non-existing domain)第一眼一看,这不是主机名有问题嘛,然后马上...

2019-10-08 09:50:12 450

原创 python批量翻译推特数据集

最近在做中文的情感分析,国内没有比较好的数据集(我指的不是评论数据集,而是类似推文的数据集)。然后在kaggle竞赛平台看到了一个推特推文的数据集。然后就想把它翻译为中文,然后再来进行训练。直接贴上代码分析from importlib import reloadimport http.clientimport hashlibimport urllibimport urllib.par...

2019-10-05 22:12:01 56

原创 推荐!一个简单而又精致的博客系统

前言写这个博客系统的初衷是为了给那些不愿自己维护一个个人博客,但又觉得市面主流博客网站广告多、不够简洁等。所以我写这个系统的时候也是尽力让它尽量的简洁,但又带一点个人风格。目前自定义主题功能还没上线,过段时间我将会加上他,让使用者可以自己DIY自己的主页。取名为Canary,中文名也就是金丝雀,目的是想把它做得很漂亮,很吸引人,让更多的人来使用它。github地址:https://github...

2019-09-26 10:08:33 761

原创 爬取酷狗音乐时的坑

今天在用java爬取酷狗音乐时碰到了两个坑,浪费了我不少时间,呜呜呜。通过拼接hash值获取歌曲真实接口地址后,遇到了以下两个错误,开始还以为是https的问题,搞了半天并不是1、{“status”:0,“err_code”:20010,“data”:[]}在浏览器直接访问可以获取到所有数据,但是通过java的httpclient获取到的只是这个玩意儿。。最后在请求头中携带cookie值为...

2019-09-23 22:46:32 1872 6

原创 vue + justauth 实现前后端分离下的第三方登录

前言前后端分离,可谓到处都是坑啊,其实最主要的还是跨域问题。哎,我太难了。使用justauth我觉得这个就没啥好说的了,直接用这个教程就好:Spring Boot 快速集成第三方登录功能vue调用接口呜呜呜,这里才是让人头疼的地方啊,跨域,跨域还是跨域问题。我开始想直接通过axios来调用后端的登录接口的,直接一个重定向跨域让我放弃了。然后我通过控制台找到了重定向后的地址,我就直接请...

2019-09-23 22:45:19 821 4

原创 docker+jenkins+阿里云容器服务自动化部署

一、在服务器上安装docker请参考我的这篇文章:ubuntu16.04中下载安装docker二、在阿里云容器服务构建镜像1、进入阿里云容器镜像服务地址:容器镜像服务根据文档先创建一个命令空间,然后就可以创建一个你项目的镜像仓库了根据提示创建完镜像仓库,然后进入构建,并添加规则这里的Dockerfile是你的项目根目录下的Dockerfile,文件名一定要相同。镜像版本根据自己...

2019-09-19 13:05:42 544

原创 spring中缓存注解的正确使用

写在前面的话在开始spring中缓存注解的用法解析前,先了解一下缓存是什么以及为什么要用缓存缓存是什么这里所涉及到的缓存都是指的web中的缓存。就是当你请求数据时,会优先从缓存中获取,如果未命中(就是缓存不存在),才去请求访问数据库,获取到数据后将数据加入到缓存中。为什么要用缓存一个需要大量重复调用的请求,用户每次调用都会触发一个数据库读取操作,当用户越来越多、数据量越大越大的时候,请求...

2019-08-31 11:22:41 120

原创 com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message

在window连接使用远程linux上的mongodb,经常出现这个错误,实在不能忍了,就去Google找了一下答案。这是由于TCP的KeepAlive 机制导致的。可以了解一下TCP 中的 KeepAlive 机制以下是mongoDB官方文档的答案。如果在客户端和服务器之间或者没有其他合理原因的分片集群或副本集的成员之间遇到套接字错误,请检查TCP keepalive值(例如,tcp_ke...

2019-08-30 20:40:35 2271

原创 springboot连接mongo自定义配置

最近使用mongo,老是报read timed out 错误,搜索了几下,没有我想要的,然后就去官方文档看了一下。根据官方文档写了一个配置类来自定义mongo客户端的连接。一下配置都是基于Java的元数据注册注册mongo实例使用com.mongodb.MongoClient直接实例化@Bean public MongoClient mongoClient(){ //...

2019-08-27 09:40:43 219

原创 拦截器返回false造成的跨域问题

因为项目后端是重写了WebMvcConfigurer,然后添加的跨域请求。添加拦截器之后,根据token信息返回状态响应码并且preHandle返回的是false。熟悉拦截器的可知,preHandle返回false后会终止请求,也就是说后面配置的跨域方法不起作用了,这也就造成了前端的跨域问题。所以需要在拦截器中配置跨域请求才能解决。代码如下:public class TokenIntercep...

2019-08-26 09:26:23 832 2

原创 mavonEditor配色方案效果

mavonEditor官方文档中只给了一个配色方案的字符串在那,并没有效果图去highlight.js的官网看看:highlight.js但是具体使用的时候,会与官方的有一些偏差。我这里选用的样式是:atelier-lakeside-dark效果如下:...

2019-08-25 21:11:53 1831 3

原创 element-ui的el-upload自定义上传头像,并显示进度条

element默认的上传头像,并没有进度条的展示,当图片较大或网速较慢时,就会显得卡顿,用户体验很不好。所以就重写了el-upload的上传头像部分,并自定义了上传行为。效果预览:根据官方文档,要覆盖默认的行为,要绑定http-request,自定义一个方法来实现。这里使用了el-progress来展示进度条,通过axios的onUploadProgress方法来获取实时的进度。代码实现:...

2019-08-24 09:57:04 5986 1

原创 Promise使用踩坑

resolve只接受status为200resolve函数只能接受响应状态码为200的,其它响应码都会丢给reject处理。我在项目中尝试用过201状态码,都直接被丢给reject处理了,搞得我debug半天。then函数后应使用一个catch函数捕捉异常当promise的then函数中发生了异常,将会抛给catch处理,所以应该在后面加一个catch捕捉异常,以更容易发现问题出在哪里,如果...

2019-08-23 18:42:01 81

原创 @RequestParam接收axios的post方式传递数据时的坑

后端使用@RequestParam来接收参数,前端用axios的post方式传数据。但是一直报错400,请求无效。@RequestParam接收的请求头格式为:application/x-www-form-urlencoded开始以为是post没有配置content-Type请求头,然而我已经配置了。后来几经Google才发现,post传参的默认格式是json格式,所以才会一直报错。然后引入...

2019-08-17 16:54:41 916 2

转载 vue使用最新版font-awesome字体图标库(内附花式玩法)

安装安装基础依赖:进入 Vue 项目文件夹,执行如下命令安装基础依赖库。npm i --save @fortawesome/fontawesome-svg-corenpm i --save @fortawesome/vue-fontawesome安装样式依赖Font Awosome 为我们提供了 Solid、Regular、Brands 这三种免费样式(日常使用完全足够)npm i...

2019-08-15 21:20:05 2796 1

原创 springboot远程连接ubuntu上的mongodb

一个在线博客项目选用了mongodb数据库,因为考虑到后期部署,所以将mongodb安装在了公网服务器上。安装mongodb可以参考官网的文档:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/以配置文件方式启动mongodb:先创建mongodb所需要的路径和文件sudo mkdir -p /data/...

2019-08-13 10:59:42 118

原创 纯jsp实现表单和文件一起上传

最近在学古老的jsp,操作实在是太复杂了。内心是崩溃的,这个文件+表单上传写了我好久。下面给出代码+我的一些解释(注释)。1、表单页面 addNews.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC ...

2019-07-18 20:52:20 362

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