自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hpsyche的博客

大四菜鸡码农,分享所学所感。

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

原创 go反射之FieldByName、MethodByName什么时候加*

前言首先要明白,Go中结构体方法的定义方式有两种,包括指针方法和值方法。如果一个方法的接收者的类型是其所属类型的指针类型(并非该类型本身),则该方法称为一个指针方法。如果一个方法的接收者类型就是其所属的类型本身,则该方法称为做值方法。示例://指针方法func (e *Employee) UpdateAge(newVal int){ e.Age=newVal}//值方法fu...

2020-05-07 14:15:47 3876 1

原创 源码之linux进程:vm_area_struct与虚拟内存的关系

前言在虚拟内存中,我提到了linux虚拟内存区域的结构,但具体其是如何在linux中表示与实现的呢?我利用了linux2.6的源码进行了浅显的分析。正文task_struct在linux中,进程控制块即PCB的结构为task_struct,我们以linux2.6为例,其源码如下:struct task_struct { //表示进程当前运行状态 //volatile避免...

2020-04-30 17:22:07 1799 1

原创 CPU中常见寄存器及与内存的交互

本篇博客关于指令集和PSW的内容参考至:https://www.cnblogs.com/f-ck-need-u/p/11141636.html,同时做下了寄存器与内存交互的总结。指令集对于每个CPU,其都有一套自己可以执行的专门的指令集(这部分指令由CPU提供)。正式因为不同CPU架构的指令集不同,使得X86处理器不能执行ARM程序,ARM程序也不能执行X86程序(Inter和AMD都使用x...

2020-04-20 22:28:12 3696

原创 SpringCloud确保服务由gateway网关转发(服务器端口规则及设置方法)

前言在前面曾提到一些方法确保SpringCloud中服务接口先通过网关转发,再到达我们的主服务,避免请求越过网关,直接访问我们的主服务。但除了在转发层面添加header的解决方式之外,我们大可在服务器层面做手脚,开放必要的端口即可,从源头上断绝了对服务接口的直接访问。正文首先有如下架构:Consul于服务器192.168.1.102;Gateway于服务器192.168.1.103;...

2020-04-19 23:52:27 10273

原创 基于Jenkins+Docker+Github实现SpringCloud自动化部署

前言本博文主要介绍了基于Jenkins+Docker+Github实现了对SpringCloud微服务项目的快速打包、部署。正文项目准备首先有如下SpringCloud项目(这里以本人的毕设项目举例),目录结构如下:bishe_base中的每个module代表一个服务,其中client为后缀的代表的是客户端,其用来暴露server服务中提供的服务接口,给外部的服务使用。为了让项目最终...

2020-04-05 17:38:13 2240

原创 《深入理解计算机系统》之虚拟内存总结

前言最近看了《深入理解计算机系统》,重温了许多操作系统和组原的知识。本篇博客主要介绍虚拟内存,让我们先从ELF-->进程引入。ELF文件对于每个程序,其在经历预处理、编译、汇编之后,都要经过链接器将其链接成一个单一的可执行文件。在现在Unix和x86-64 Linux系统上,其使用的可执行格式为ELF,如下:可以看到ELF涵盖了程序中的各种信息,加载器就是通过读取E...

2020-03-30 18:30:23 833

原创 MySQL查询缓存与缓冲区的区别

前言最近在研究mysql时,发现查询缓存和缓冲池是两个比较容易混淆的点,在这里简单提一下二者的联系与区别。正文查询缓存首先看下mysql的结构图,如下所示:可以看到,查询缓存作用于第二层,即核心服务层。其主要作用是保存查询返回的完整结果。当查询命中该缓存, MySQL会立刻返回结果。跳过了 解析,优化和执行阶段,加快查询速度。判断缓存命中的方法很简单:缓存存放在一个引用表中,通过一...

2020-02-23 16:05:43 2840 2

原创 union当第一个表不存在数据时,再查询第二个表

前言在很多业务场景中,我们会出现如下的需求:在某一个表中查询“热”数据,查询不到再去另一个表中查找“冷”数据,此时我们如何通过sql语句实现呢?正文首先,创建student和student_2两个表,如下:CREATE TABLE `student` ( `id` bigint(20) NOT NULL, `name` varchar(100) DEFAULT NULL, ...

2020-02-04 21:12:41 1941

原创 volatile简介及可见性、有序性的保证

volatile简介volatile是jvm提供的最轻量级的同步机制(相比于synchronized,其要轻量很多)当一个变量定义为volatile后,其具备两种特性:此变量对所有线程的可见性可见性:当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。禁止指令重排序优化指令重排序:JVM为了进行优化,会对变量赋值等操作进行一系列的优化,其只保证了所有依赖赋值结...

2019-12-24 22:42:50 1189 1

原创 linux中查看java汇编代码(hsdis+jitwatch)

前言在研究JVM时,想要研究下volatile关键字的底层实现,需要其对其汇编代码的指令进行观察,故需要查看即时编译器产生的汇编代码。正文环境:linux(deepin)hsdis的配置进入https://sourceforge.net/projects/fcml/files/fcml-1.1.3/,下载源码并解压(这里可能需要科学上网)cd fcml-1.1.3./configu...

2019-12-24 19:57:17 737 1

原创 idea查看java字节码工具(jclasslib Bytecode viewer)

前言在进行java代码,调试时,有些复杂的情况(如语法糖等)会让我们难以理解JVM的具体执行细节,此时我们可以通过javap反编译来查看JVM字节码,而在ide中,通过jclasslib Bytecode viewer工具,可以更为细节地观察某类的字节码及字节码代表的字段表集合等信息。正文首先,在intelij idea中引入工具,具体操作如下:重启ide后,点击某个类,在工具栏vie...

2019-12-14 00:28:21 3114

原创 deepin通过nginx+vsftpd搭建文件服务器

Deepin搭建文件服务器前言在项目中,需要使用到图片上传等功能,故考虑到自己搭建一个文件服务器,其中nginx用来对我们浏览器中的url解析,映射到linux上的指定目录上去;而vsftpd作为一个ftp服务器软件,能够提供传输文件的服务,服务器安装了vsftpd后,我们即可以很方便地进行不同主机之前的文件传输等。VSFTPD的安装apt-get install vsftpd新建用户...

2019-12-08 00:45:50 918

原创 DTO转VO时,将日期由DATE转String

前言当后台日期为Date类型时,在进行前端显示时,如果不加以处理,通过会以时间戳的方式进行渲染,在此情况下,为了简化前端对日期数据繁琐的操作,在后端传值的时候,可直接将date转为string类型。正文本文主要介绍的是在DTO对象转为VO对象时,如何将DATE转化为String类型。首先需要引入cglib的包在复制对象时,我们可以引入转换器public static void copy...

2019-12-06 22:23:12 1001

原创 拦截器中注入Feign接口后,报错NullPointerException

前言在拦截器中,需要通过Feign调用Auth基础服务,判断用户身份;此时在Feign Api中出现了NPE错误。正文之前写过类似的博客日志拦截NLP处理,原因主要是:在注册拦截器时(WebMvcConfig类)直接通过new XXXInterceptor(),并没有触发Spring去管理bean,所以@Autowired没有生效。在项目中,我使用了主动声明、手动注入的方法,具体如下:...

2019-12-01 23:09:40 3295

原创 SpringCloud中gateway对用户身份拦截,Vue axios统一处理状态码出现跨域问题

前言在项目中,我们很多时候都需要对用户身份进行判断,在用户身份无法被验证时,我们返回{status:401,msg:‘XXX’}等,如若能在axios处统一拦截处理,会方便许多;同样,如果在后台gateway处,也能提前对token进行统一验证,避免异常用户的异常访问。正文首先在Vue封装的axios工具类中,统一对axios进行拦截操作// 添加响应拦截器axios.intercept...

2019-11-30 00:59:33 1199

原创 SpringBoot中maven引入本地项目成功,但import找不到包

问题引入在毕设的maven项目中,由于需要将一个工程打包(install到本地maven仓库下),在其他工程中引入此maven使用,但出现了以下问题:A工程install成功–>B工程pom.xml也引入成功–>在B工程中,import A工程的类失败解决方案解决方法很简单将A工程的pom.xml的打包插件进行修改原先的插件配置:<build> &lt...

2019-11-29 15:26:56 3487 1

原创 SpringCloud+Vue解决跨域Session不一致问题

前言在做项目时,在登录验证码生成环节,后台生成验证码图像返回给前端,并将验证码置于session,用户填入验证码后传入后台并验证。但在实验时发现,由于前后端分离项目存在跨域问题,session不再相同,通过输出 sessionId也可以看出,不同请求到达服务端时sessionId是不同的,故需要考虑如何解决Session不一致的问题。正文CORS首先简单讲下CORS。CORS是一个W3...

2019-11-06 20:01:06 1389

原创 SpringCloud确保服务只能通过gateway转发访问,禁止直接调用接口访问

前言在微服务体系架构中,网关承担着重要的角色,在网关中可以添加各种过滤器,过滤请求,保证请求参数安全,限流等等。如果请求绕过了网关,那就等于绕过了重重关卡,直捣黄龙,所以,在分布式架构中,我们需要有一定的防范,来确保各个服务相互之间安全调用。正文思路1、在网关中给所有请求加上一个请求密钥2、在服务添加过滤器,验证密钥首先在网关服务(gateway)中添加过滤器,给放行的请求头上加上判断...

2019-11-06 01:08:23 25522 23

原创 Java反射原理及简单的源码解析

前言首先,了解下java类的初始化过程:编程:将java文件编译为.class字节码文件加载:类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,并存储在运行时内存区的方法区,然后将其转换为一个与目标类型对应的java.lang.Class对象实例连接:细分三步验证:格式(class文件规范) 语义(final类是否有子类) 操作准备:静态变量赋初值和内存空间,fin...

2019-10-28 16:27:22 401

原创 JVM内存模型和JAVA内存模型的区别

前言很多人都以为JAVA内存模型就是JVM内存模式,其实二者是不同的概念,本文针对此,主要讲解JVM内存模型和JAVA内存模型的区别。正文其实本身二者就是不同的概念,在此我分开来讲。JVM内存模型JVM内存模式主要分为:程序计数器、JAVA虚拟机栈、本地方法栈、堆和方法区,其中JDK1.8之前方法区的实现为永生代,而JDK1.8之后方法区的实现转为元空间。各个内存区域的作用在很多博客和...

2019-10-11 23:17:33 1983

原创 模糊查询%在最前面,能否或者怎么使用索引

前言众所周知,在索引时,如果模糊查询的%置于最前面,索引会失效。但之前面试时,面试官问了我一个问题:%前置的情况,什么情况下会使用到索引?借此博客,说明下。正文解决方式一反转模糊查询的字段,但是注意,对于"%keywork%"的索引,此方法是无效的。如select * from student where name like '%三';我们可以改造为:select * fro...

2019-10-07 16:36:41 6155 4

原创 Mysql数据库是否发生死锁?死锁的场景

之前在面试中被问到此问题,在此做下笔记!Mysql场景的存储引擎为MyISAM和InnoDB,我们以这两种来分析。MyISAM总:MyISAM中不会出现死锁。在MyISAM中只用到表锁,不会有死锁的问题,锁的开销也很小,但是相应的并发能力很差。解析:MyISAM不支持事务,即每次的读写都会隐性的加上读写锁,而我们知道读锁是共享的,写锁是独占的,意味着当一个Session在写时,另一个Se...

2019-10-04 16:30:44 1325

原创 Java后台秋招面试题

最近在秋招中,将常见面试题统计下,作此博客。并发(线程)为什么不推荐使用Executors直接创建线程池线程池参数分别代表什么?怎么配置才合理?JVM中锁的分类,偏向锁、轻量级锁、重量级锁操作系统死锁产生原因,如何避免进程与线程(区别)内核级线程与用户级线程协程进程通信方式线程通信方式计算机网络POST与GET的区别Http1.0/1.1/2.0区别TCP与...

2019-09-29 23:48:21 340 1

原创 try finally中return count++等情况下,返回值的理解

前言首先有如下代码:package hpsyche.string;/** * @author Hpsyche */public class MyTest { static Integer count=10; static Integer method(){ return count++; } public static void mai...

2019-09-13 10:40:29 648

转载 为什么匿名内部类需要访问局部变量需要加上final

前言package hpsyche.finaltest;/** * @author Hpsyche */public class Hello { public static void main(String[] args) { String str="haha"; new Thread(() -> System.out.println(str...

2019-09-13 01:31:14 1296 2

原创 前后端分离(SpringBoot整合Vue)部署至服务器

前言之前曾在博客中提到SpringBoot整合Vue,这里进一步扩展,谈谈如何将前后端的项目部署到个人服务器中,由于个人只有阿里云服务器一台,这里的操作是前后端项目均部署至tomcat的情况,在网上自己也并未找到详细的教程,自己操作时也遇到一些阻碍,这里做下记录,也给他人提供借鉴。事不宜迟,进入正文。正文前端的操作首先对于vue代码,如下操作:npm run build将dist...

2019-09-08 00:56:48 4544

原创 leetcode——对角线遍历(之字形遍历二维数组)

引入本题可见leetcode第498给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。示例输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,4,7,5,3,6,8,9]思路其主要思路为,将大问题拆解为一个个“通过起始位置和终止位置输出对角线”的结果的...

2019-09-03 11:49:30 1532

原创 RabbitMQ入门(四、RabbitMQ+SpringBoot)

前言Springboot对rabbitmq的支持度很高,所以Springboot继承rabbitmq十分简便。首先maven引入amqp<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp<...

2019-09-01 23:43:18 173

原创 RabbitMQ入门(三、RabbitMQ的Java使用)

准备工作首先需要安装配置好rabbitmq,网上很多教程,在此不再赘述。创建用户hpsyche,密码:xxxxxx,同时创建host域(可以看做新建数据库),之后就可以进入代码阶段了(首先导入包(此处创建的是maven工程)<dependency> <groupId>com.rabbitmq</groupId> <artifactI...

2019-09-01 23:42:09 343

原创 RabbitMQ入门(二、RabbitMQ基本发送方式)

本文出现的代码只是简述,详细代码之后文章有涉及。简单队列RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费。工作队列即单生产者,多个消费者消费队列的情况。工作队列–轮询分发即使一个处理快,一个处理慢,消息队列也还是平均的分发工作队列–公平分发(fair dipatch)...

2019-09-01 23:39:36 470

原创 RabbitMQ入门(一、RabbitMQ基本概念)

什么叫消息队列消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。为...

2019-09-01 23:33:54 389

原创 数据的存储结构主要有哪两种基本方法

顺序存储结构和链接存储结构

2019-08-30 00:37:10 19192 2

原创 顺序表之C语言实现

//ArrayList.h文件const int MaxSize = 50;template<class T> //定义模板类ArrayListclass ArrayList{ public: ArrayList() { length = 0 }; //无参构造函数 ArrayList(T a[], int n); //有参构造函数 ~ArrayList...

2019-08-30 00:34:10 355

原创 Vue.js密码框大小写提示

前言在写项目调前端时有如下需求:密码框大写时需要加以提示;项目组件使用的基本是element-ui,由于自己对前端不对熟悉,在这里做下笔记,也算是给大家提供下参考。具体实现首先是密码框(主要是这句:@keyup.native=“loginKeyDown”)<li> <el-input prefix-icon="el-icon-lock" type="passwo...

2019-08-28 23:41:21 2535 1

原创 拦截器实现增删改操作的日志管理(整体思路)

此文接上篇拦截器实现增删改操作的日志管理;由于上篇文章讲述得较为简略,这里做下详细说明。前言项目的数据库设计有表:T_employee:用户表T_group:用户组表T_group_employee:用户及组关联表T_menu:菜单表T_element:操作元素表T_group_authority:组别权限表menu用来前端管理平台的树形菜单渲染,而element(表中有属性...

2019-08-28 23:27:23 1167

原创 拦截器实现增删改操作的日志管理(Interceptor中NullPointException原因)

在项目的系统中,需要写一个日志管理,即将每次用户的增删改操作都存储于数据库中,此时,通过拦截器来设置,通过判断用户的请求,由于项目符合restful风格,但请求method为put、delete或post时,获取用户信息及请求信息,插入数据库中首先是定义一个拦截器/** * @author fuzihao * @date 2019/8/14 16:03 */public class O...

2019-08-21 01:00:11 865

原创 线程-支持可靠取消操作的生产者消费者日志服务

今天看了下《并发编程实战》,觉得日志服务的生产消费者demo挺有趣的,故自己实现了下;Bad Way以下为第一种不好的实现方式package hpsyche.log;import org.junit.Test;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQue...

2019-08-08 20:39:16 286

原创 poi多线程操作问题(OOM与操作createCell报错ConcurrentModificationException)

前言在公司项目“北森开放平台”API的对接上,需要将8w多条数据导出到Excel中,原先单线程访问5000条数据需要20多分钟;后面利用线程池开启多线程访问API接口来获取信息,6分钟搞定,大概效率提高了5倍,但是!!!同时导出8w多数据,发现在导出5w多的时候OOM了,原因:数据量太大,造成sheet对象过大,堆空间直接OOM;解决方案:减少不必要的字段多文件打包(每5000...

2019-08-04 17:01:17 1557 1

原创 SpringCloud之Gateway实现路由转发

动态路由:在访问不同的url时,通过gateway对路径的拦截,按url的区别分配到不同服务器上。具体实现首先创建一个父module,eureka-family,同时开启consul服务提供者创建子module,eureka-client-hello(其实服务发现工具用的是consul,但命名成eureka了,不过也不重要!)pom.xml如下<?xml version="1.0...

2019-07-28 22:57:10 3713 2

原创 SpringBoot动态切换多数据源

问题引入在大型分布式项目中,经常会出现多数据源的情况,比如说mysql结合sqlServer、Oracle等进行数据存储,此时就需要我们通过Spring配值多数据源,在对应库时进行切换,相应的数据库进行CRUD操作。难点所在由于项目中的Bean基本都为单例模式,此时如果大量用户不断切换数据库,改变dataSource,会造成验证的资源掠夺问题,显然,此时解决方案有两个思路,一是:以空间换取时...

2019-07-27 16:46:40 1677

空空如也

空空如也

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

TA关注的人

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