自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在idea中使用tomcat部署基于spring boot的web项目后页面404的问题

在idea中创建基于spring boot的web项目,然后在idea中配置了tomcat(配置没有出错),如图然后点击运行访问localhost:8080却是404。解决办法:产生这个问题的原因可能很多,这篇博客只是指出其中一个原因(很大概率)因为spring boot默认内置了tomcat,刚才又在idea里手动配置了一个tomcat,运行的是我们手动配置的那一个,...

2020-03-28 22:21:53 629

原创 idea使用tomcat部署项目无Artifact选项

问题如图,只有external source,没有artifact选项解决办法:首先ctrl + shift + alt + S 打开 project structure,然后选中Artifacts然后点 + 号选择Web Application: Exploded即可。然后就有artifact选项了...

2020-03-28 22:13:18 2100

原创 idea中配置git命令

原来是这样的,默认使用window自的命令。如果要改成git的命令,操作如下:只用改这一项就行了,改成git的安装目录下的bin/bash.exe,不能直接写bin,必须带上bash.exe如果之前在idea中打开了terminal,需要关闭重新开启一次才生效(不用重启整个idea,只重启idea中的terminal即可)。开启terminal的快捷键是 alt + F12。...

2020-03-24 17:27:20 652

转载 js require() 源码解读

http://www.ruanyifeng.com/blog/2015/05/require.html

2020-03-10 18:12:17 168

原创 springboot以java方式配置数据源和mybatis

mybatis 在 springboot 中,properties文件形式配置:mybatis.type-aliases-package=com.iqiyi.anno.modelmybatis.mapperLocations=classpath*:com/iqiyi/anno/sql/mapper/*.xmlmybatis.configuration.map-underscore-to-c...

2020-02-17 12:55:41 584

原创 spring中配置mongo的两种方式

uri方式配置:spring.data.mongodb.uri=mongodb://anno_mongo_prod:[email protected]:27129,anno-mongo-prod-2.qiyi.mongo:27129,anno-mongo-prod-3.qiyi.mongo:27129,anno-mongo-prod-4.q...

2020-02-17 12:54:26 878

原创 基于zookeeper实现分布式锁的原理

一、 排他锁又称为写锁或者独占锁,是一种基本的锁类型。若事务T1对数据对象O1加上了排他锁,在加锁期间,仅允许事务T1对O1进行读取和更新操作,直到T1释放了锁,其他事务才能对这个数据对象进行任何类型的操作。ZK如何使用排他锁:1、 在Java开发中,有两种常见的方式来定义锁,分别是synchronized和ReentrantLock。ZooKeeper通过其上的一个数据节点表示一个锁...

2019-12-24 15:55:26 145

原创 面向切面编程(AOP)的一次实践(实现方式)

业务场景: 在多个不同的service的多个不同的方法中的第一行,或者最后一行要执行某个共同的操作。但是这个操作跟它的调用者(那些service中的那些方法)的业务逻辑其实并没有什么相关性。如果封装一个方法,在那些service中的那些方法中去调用它,就会让代码和系统结构显得很不优雅,因为把毫不相干的业务逻辑在代码层面柔和在一起了。这种场景下,正好是面向切面编程的用武之地。例子:...

2019-08-29 13:49:51 464

转载 分布式系统架构Quorum算法和实现上的坑

一、引言(业务场景) 先简单说说线上生产系统的一个背景,因为仅仅是文章作为案例来讲,所以弱化大量的业务背景。简单来说,这是一套分布式系统,系统A需要将一个非常核心以及关键的数据通过网络请求,传输给另外一个系统B。所以这里其实就考虑到了一个问题,如果系统A刚刚将核心数据传递给了系统B,结果系统B莫名其妙宕机了,岂不是会导致数据丢失?所以在这个分布式系统的架构设计中,采取了非常经...

2019-08-24 13:01:33 518

原创 pom文件导入了依赖但是代码中仍然报错的问题

在pom文件中添加了依赖,并且pom文件没有报红,看起来像是把所有依赖库全部加载进来了,但是代码中使用依赖的类库使报红。可能是在pom中使用了<dependencyManagement>节点管理依赖,如图:该节点的特点是在pom中添加了某个依赖,不会直接立刻马上将其下载并且添加到项目的external libraries中。只有在某个子模块的pom文件中也添加了该类库时,才...

2019-04-29 14:03:51 9395

转载 前后端分离的原理

本文转载自:https://www.toutiao.com/a6583908446138008078/ 前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步...

2019-03-20 10:13:58 372

原创 Vue的this.$root.Bus.$on事件被多次触发、多次监听的问题

前端vue项目中,各个组件(非父子关系也可)之间可以通过Bus进行事件通信。main.js中:import Vue from 'vue'const Bus = new Vue();const app = new Vue({ el: '#app', data: {Bus}, router, components: {App}, template: '&lt;App/...

2019-01-15 11:09:50 19625 3

原创 vue+jsonrpc+mongoDB文件传输解决方案(任意格式文件)

环境及需求:前端采用vue;后端采用spring,但是只用到了spring的对象注入功能,未使用spring web相关功能。前后端通信采用jsonrpc,现需要在前端选中文件(格式未知,上传到后端,后端将其存储在mongoDB中)。背景:spring web可以直接使用controller接受MultipartFile对象;但是jsonrpc不能直接传输文件类型,jsonrpc是轻量...

2018-12-25 15:37:37 2009

原创 idea最常用的快捷键

ctrl + z :undo(撤销)ctrl + shift + z:undo的反向ctrl + / : 添加//注释ctrl + shift + / : 添加/**/注释ctrl + x:剪切当前行ctrl + y:删除当前行(不如ctrl + x好用,因为要两个手按)ctrl + d:向下复制当前行ctrl + shift + up/down:把当前行代码向上/向下...

2018-12-14 10:44:04 184

原创 JS使用Blob导出csv文件中文乱码解决方案

在数据前面加上字符串"\ufeff"即可。示例:exportStatisticData: function (type) { let data = ''; let filename = ''; if (type === 'LABEL') { data = this.generateCSV(this.statisticData...

2018-12-12 16:03:02 12570 3

原创 前端下拉控件select的备选项option标签的属性key和value以及标签值的区别

说明:“标签值”指&lt;option&gt;&lt;/option&gt;标签之间的值,例如&lt;option&gt;Hello&lt;/option&gt;,标签值为“Hello”。key属性用于区别不同的&lt;option&gt;,多个key值不能重复,通常取Id作为key值。value属性是选中某一项之后,&lt;select&gt;控件的返回值,通常也取Id作为value的值...

2018-11-27 13:21:31 16384 3

原创 java六种线程池

六大线程池本文讲述之前我们提到的Executors类(注意加了s的)中的六个静态方法,分别创建六种不同的线程池对象。之前我们已经提到,ThreadPoolExecutor类的别称就是线程池。它是继承自Executor接口(注意没有s)。继承关系图如下。  六大静态方法创建的ThreadPoolExecutor对象,返回的父接口的引用,即返回的ExecutorService的

2018-01-14 14:13:06 26131 6

原创 java并发编程(线程池的使用与原理)

线程池引语(和线程池本身无关): 并没有对A中的方法做同步处理输出结果依然是500000,因为上面的5个任务其实是在主线程中串行执行的。 实际中,我们不会自己写一个类去实现Executor接口和接口里面的execute方法,因为那实在是太底层了。execute方法的实现是非常复杂的。Executor接口中execute方法的实现,java已经

2018-01-09 19:38:12 395

原创 java并发编程(ExecutorService中的submit方法)详解

submit( ):该方法接收Runnable或Callable对象作为输入参数(该方法输入参数请参考上篇文章java线程池任务提交(Runnable、Callable、FutureTask),这篇文章主要讲submit方法的返回值以及返回值的使用),返回一个Future对象。submit方法提交的任务中的call方法如果返回Integer,那么submit方法就返回Future;如果call

2018-01-09 17:57:00 52250 1

原创 java线程池任务提交(Runnable、Callable、FutureTask)

任务的封装与执行过程 (注:下面所说的Runnable对象,Callable对象都是指实现了该接口的类的对象)之前要交给线程执行的任务我们都把它封装在Runnable中。对于线程池而言,多了一种Callable的封装方式。Runnable:其中的run()方法没有返回值。①.Runnable对象可以直接扔给Thread创建线程实例,并且创建的线程实例与Run

2018-01-09 17:11:59 16451 1

原创 Spark中的稀疏向量SparseVector类的源码解读

首先纠正一下标题,这个类不是spark的源码中的,而是scala的源码中的,但是在spark源码中经常用到它,所以把把。稀疏向量,底层基于索引数组和值数组共同实现。该类的核心思想是用两个数组,一个记录原始向量中非零元素的值,另一个记录原始向量中非零元素在原始向量中的位置。一共有三个数据成员,size记录原始向量的长度,indices数组为索引数组,values数组为值数组,索引数组和值数组的长度必

2017-12-20 23:44:22 6107

空空如也

空空如也

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

TA关注的人

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