自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

转载 熟悉开发流程:SpringBoot+Mybatis+Druid+Swagger集成简单demo

在项目开发流程中需要使用SpringBoot+Mybatis+Druid+Swagger,所以简单制作了一个demo记录学习过程。配置项目环境导入依赖选择Web->Spring Web,Sql->Mybatis Framework,MySql Server。创建成功后在项目中建立如图文件夹:在pom.xml中注入druid和Swagger的依赖:<!--druid连接池--><dependency> <groupId>com.alibaba&l

2020-10-30 14:20:11 160

原创 以ReentrantLock为例详细讲解AQS底层原理

AQS可重入锁已成功获取锁的线程再次获得该锁时可以为count++,只要count>0表示锁被该线程持有,每次释放锁count–直到count=0表示该线程不再持有锁;可重入锁可以有效避免单一线程自己出现死锁。LockSupportLockSupport是用来创建锁和其他同步类的基本线程阻塞原语;其中的park()和unpark()方法用来阻塞线程和解除阻塞。synchronized中的wait()实现线程等待,notify()实现线程唤醒;必须先等待再唤醒;lock中condition

2021-08-08 19:27:30 207

原创 Redis常见面试

1.Redis有哪些数据结构1.String类型,相当于Java中的String,Redis中通过C语言用一种叫做SDS(简单动态字符串)的数据类型实现的,常用set key value;get key;mset key1 value1 key2 value2;mget key1 key22.list列表,相当于Java中的双向链表LinkedList,在数据量少的时候底层使用的是ziplist这种占空间较少的结构,在数据量变多后会用ziplist+指针形成链表,常用lpush;lpop;rpush

2021-08-01 18:14:22 198

转载 HTTPS工作流程

假设现在CA机构有一套非对称加密的公钥A+ 和 私钥A-(浏览器会预存公钥A+)目标服务器也有一套非对称加密的公钥B+ 和 私钥B-1、浏览器向服务器发起请求;2、目标服务器收到请求,将数字证书返回给浏览器(包括公钥B+ + 数字签名);3、浏览器收到证书之后,先取到签名,利用浏览器预存的CA机构的公钥A+,对签名进行解密,解密之后得到一份数据摘要(假设叫T),接着利用证书里面提供的Hash算法对明文数据进行Hash,又得到一份数据摘要(假设叫S)。此时,如果 T=S ,那认为这份证书就是有效的。有

2021-07-27 21:29:18 114

原创 阿里JAVA后端一面

阿里Java后端一面JAVA1.泛型以及类型擦除-泛型回答了几个类型(?,K,V,E,T),类型擦除没太了解过,当时回答的是编译时不指定具体类型,运行时指定,应该答错了,这块没仔细看。2.HashMap和ConcurrentHashMap的区别-回答了1.8前后这两个结构的区别,八股文没啥好说的3.JAVA内存模型-他问的是java内存模型,我以为说的是JMM,我又问了一遍面试官想问的是JMM还是JVM,他说是JVM,然后开始背八股文,但是这一块我一直不明白,网上很多博客都把JAVA内存模型=

2021-03-31 11:59:37 119 3

原创 MySQL MVCC的实现机制

**先拖一下写这篇博客的视频来源**b站一个叫诸葛老师讲的MVCC机制,思路很清晰,一遍就看明白了,建议先去看一下这个视频,再来看这篇博客,更好理解一些。首先理解两个概念:1.MVCC会给我们数据库的每一个表添加两个隐藏字段:当前事务ID,以及undo日志的回滚指针;根据回滚指针我们可以按顺序生成如下图所示的一个版本链。2.ReadView快照视图ReadView视图在产生的时候会记录下当前活跃所有活跃(也就是还没提交)的事务数组,以及所有的事务(包括已提交)里面ID最大的事务ID值。

2021-03-25 20:55:36 89

原创 网易杭研Java后端开发一面面经

1.项目背景、模块分工、自己的任务、干了什么2.Java如何保证线程安全-回答了1.synchronized关键字 2.Lock锁 3.ThreadLocal3.你提到了synchronized关键字和Lock锁,讲一下区别-Lock可以公平/非公平锁,等待可中断,是非重量级锁4.你提到了公平锁和重量级锁,解释一下-synchronized是1.6之前是重量级锁,1.6以后优化(讲了一下锁升级的过程)-从AQS的内部结构谈起分析了一下如何实现公平锁和非公平锁5.请你说说如何设计一个MySQL

2021-03-25 09:41:41 117 1

原创 Java面试(美团)

美团一面(到店)1.自我介绍2.介绍一下项目-背景讲了一下,举了个例子让面试官大概明白了是干嘛的,然后说了一下项目是为了解决什么问题。3.项目里有哪些难点怎么解决的-回答的使用redis解决读hbase/janusgraph慢的问题然后又问了关于redis你还知道什么,我说redis的底层数据结构我讲了一下,现在突然想起来之前准备的redis持久化方式没给面试官说…4.在这个项目中你学习了什么-我说学会了学习分析开源项目的代码…然后我实在说不出来了(反正一紧张啥也不记得了…)OS1.进程

2021-03-23 15:46:38 193 1

原创 Java面试:1.8前后的HashMap、ConcurrentHashMap

HashMap1.8以前(Entry数组+链表)loadfactor负载因子0.75DEFAULT_INITIAL_CAPACITY 默认容量16threshold容量*loadfactorput先扩容再插入如果定位到的数组位置没有元素 就直接插入。如果定位到的数组位置有元素,遍历以这个元素为头结点的链表,依次和插入的 key 比较,如果 key 相同就直接覆盖,不同就采用头插法插入元素。HashMap1.8以后(Node数组+链表/红黑树)链表长度>8并且数组>64转化成红黑

2021-03-22 11:15:10 165 1

原创 面经总结:JAVA后端开发

看了这么多面经,有很多问题答案并不统一,这里列举了一些答案比较有歧义的,并且分享一下我认为正确的答案,希望下个月的面试顺利。TCP三次握手为什么三次握手保证客户端到服务端以及服务端到客户端之间都能成功发送接收数据,以防出现客户端发送给服务端连接请求因网络原因没有送达,超时后客户端重新发送一个连接请求,而此时服务端接收并确认,建立连接后传输数据释放连接,之后收到了超时的连接请求,导致误认为接收到的是新的连接请求,从而打开连接不停的等待客户端发送数据。为什么四次挥手第一次挥手客户端发送给服务端FIN标

2021-03-19 13:18:39 215

原创 Java面试:说一说项目的技术选型

从以下方面去讲JDK版本:JDK8/JDK7 + OracleJDK/OpenJDK?Java开发框架:Spring Boot/Spring + Hibernate/MyBatis?前后端分离:单页应用/模板引擎?前后端接口文档自动生成:Swagger?业务端逻辑校验框架:Functional Validator/Fluent Validator/Hibernate Validator?...

2021-03-15 20:26:48 714

原创 Java面试:使用多线程实现交替打印奇偶数

public class test { public static int count=0; private static final Object lock =new Object(); //lock是当前对象的锁 public static void main(String[] args) { /** 此处()->匿名函数相当于 new Runnable(){ @Override public void run()}

2021-03-15 12:49:01 133 1

原创 Springboot后端参数校验方法

public Response addSubItem(@RequestBody AddSubRequest addSubRequest) { govAffairService.addSubItem(addSubRequest.getId(),addSubRequest.getSubItemIds()); return createResponse(null); }以上述接口为例,增加参数校验的方法为,为AddSubRequest类打上校验注解@Datapub.

2021-01-14 10:16:58 321

转载 使用JREBEL热部署项目

一个稍微大型一点的项目启动会有几分钟,如果每次修改完bug重新启动会很耗时间,在google上查了集中热部署方法,目前只有jrebel可以免费并且上手很快,成功安装后每次修改代码无需重新启动。参考文章:链接简介JRebel是一套JavaEE开发工具。Jrebel 可快速实现热部署,节省了大量重启时间,提高了个人开发效率。JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。JRebel使你能即时分别看到代码、类和资源的变化,

2021-01-11 11:07:24 659

原创 类加载器详细讲解

类加载器一个类的加载需要经过这三个阶段:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAF6u8YW-1608515701430)(/Users/wuchao/Library/Application Support/typora-user-images/image-20201218133921046.png)]类加载器虚拟机内置加载器根类加载器(Bootstrap)是最底层的加载器,由c++实现,没有父加载器,也没有继承ClassLoader类,它主要负责加载由

2020-12-21 09:55:18 342 3

原创 反射、类加载器

反射反射机制的作用可以通过反射机制操作(读和修改)字节码文件(*.Class)。反射机制涉及的java包java.lang.reflect.*;反射机制相关的重要类java.lang.Class;代表整个字节码java.lang.reflect.Method;字节码中的方法字节码java.lang.reflect.Constructor;字节码中的构造方法字节码java.lang.reflect.Field;字节码中的属性字节码获取Class字节码的三种方式1.使用Class类的静态方

2020-12-18 13:31:43 210

原创 使用Rest风格操作elasticsearch文档

打开kibana的console界面创建文档-PUT请求添加索引名为nju,类型为user,id为1的文档数据:PUT /nju/user/1{ "name":"nanjing", "age":23, "desc":"salary-2500", "tags":["lol","qq"]}在head可视化界面中可以看到新建成功获取文档数据-GET请求GET /nju/user/1执行结果:#! Deprecation: [types removal] Specifyin

2020-12-14 15:53:53 76

原创 elasticsearch插件 ik分词器使用以及扩展ik词典

下载从github-ik下载插件代码包,解压到elasticsearch的plugin目录下,然后重启服务。

2020-12-14 09:41:59 569

原创 ElasticSearch quickstart教程

环境需要nodejs,python安装1.Mac环境使用brew install 命令安装,推荐修改brew源为清华源,否则下载速度很慢。2.直接去华为镜像网站下载。3.翻墙去下载elasticsearch官网熟悉相关目录配置文件/elasticsearch/7.10.0/libexec/config其中log4j2是日志配置文件jvm.options jvm配置文件(默认jvm内存为1G)elasticsearch.yml es配置文件/lib 相关jar包/modules 模块

2020-12-11 16:43:09 196 1

原创 JanusGraph:在Gremlin控制台中切换图,新建图

昨天对JanusGraph学习了QuickStart,发现了一个问题:在实际开发的过程中,我们肯定不可能只用到一张图,那么如何创建新的图,或者说在图之间切换呢?重点就在与/conf下的.properties文件。我们知道,在使用grelin时,几乎第一步都是加载配置文件,例如 graph = JanusGraphFactory.open('conf/janusgraph-hbase.properties')下一步就是使用j = graph.traversal()实现对图的遍历。在这个过程中就产

2020-12-02 10:18:39 561 1

转载 高级软件设计-工厂模式、抽象工厂模式的区别与联系

简单工厂模式简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类。 比如下图中的鼠标工厂,专业生产鼠标,给参数0,生产戴尔鼠标,给参数1,生产惠普鼠标。 ;工厂模式 工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。 戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。 生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。 后续直接调用鼠标工厂.生产鼠标()即可 ;抽象工厂模式 抽象工厂模式也就是不仅生产鼠标,同时生产键盘。 也就

2020-12-01 16:26:25 228

原创 图数据库JanusGraph的QuickStart案例“众神之图”(本地启动)

项目中需要使用图数据库JanusGraph,在官网学习的过程中遇到了不少坑,记录一下。前提:电脑成功安装并配置了hadoop,hbase,zookeeper并通过start-all.sh start-hbase.sh zkServer.start命令将其启动。这里只提供本地启动的方式,不提供连接远程服务器的方式,如有需要移步->JanusGraph官网教程下载并解压官网教程中的压缩包,进入目录$ cd janusgraph-0.5.2$ ./bin/gremlin-server.sh s

2020-12-01 15:08:03 396 1

原创 高级Linux选择+填空复习

Ch1:LINUX产生:自1991年8月发布以来,Linux系统发展非 常迅速,目前主要应用于服务器和嵌入式 开发领域,是一个开放的、创新的、具有 前瞻性的操作系统内核谁写的Linux系统的内核最早是由芬兰大学生Linus Torvalds开发, 并于1991年8月发布。当时由于Unix系统的商业化, Andrew Tannebaum教授开发了Minix操作系统,该系统 不受AT&T许可协议的约束,可以发布在Internet上免费给 全世界的学生使用,这为教学科研提供了一个操作系统。1991年,

2020-12-01 11:07:42 444

原创 SpringBoot 后端对数据展示添加分页功能

SpringBoot 后端对数据展示添加分页功能在前后端分离的项目中,前端对页面的展示需要分页功能,此时后端的接口中也应该实现分页功能,前端才能顺利展示。以常用的Controller-Service-Mapper架构为例,在正常的将数据封装为List列表之后,对Service和Controller层改造一下即可。Service层:首先把返回值类型由List改为PageInfo,并在函数参数中添加分页大小和当前页面参数,如下: public PageInfo<CatalogRespons

2020-11-25 11:20:34 1126 1

原创 SpringBoot项目报错Stream closed

报错: org.springframework.http.converter.HttpMessageNotReadableException:I/O error while reading input message; nested exception is java.io.IOException: Stream closed初步判断是因为请求方式POST传入了多个参数引发的问题解决方案:初步请求方式改为GET,在Mapper(Dao)层函数的参数加上注解@Param,在Controller中参数加上

2020-11-13 10:27:43 2971

转载 解决数据库里表字段带下划线,实体类转小驼峰,Mapper的映射问题

https://www.cnblogs.com/supiaopiao/p/9341502.html

2020-11-11 09:45:31 1911

空空如也

空空如也

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

TA关注的人

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