![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础知识
xiaoguangtouqiang
一枚小小程序员
展开
-
Git操作
git操作原创 2023-02-27 14:48:51 · 139 阅读 · 1 评论 -
Gradle多模块项目配置
springboot gradle 多模块项目配置原创 2022-09-30 18:03:43 · 1266 阅读 · 0 评论 -
Gradle版本的统一管理
gradle中版本的统一管理配置原创 2022-09-29 11:17:36 · 1571 阅读 · 0 评论 -
Springboot打包镜像
使用start.spring.io生成了一个spingboot的项目,然后考虑打包生成镜像来发布;然后搜了下,网上有使用"com.spotify dockerfile-maven-plugin"这个插件的,我本来也是用的这个,但是在打包的时候总是告诉我2375端口连接不上啥的报错;所以换成了jib-maven-plugin这个插件来打包镜像,过程比较简单:1>在pom.xml中添加依赖<plugin> <groupId>com.google.cloud.too原创 2020-06-01 19:10:51 · 2066 阅读 · 0 评论 -
csv文件转java类
1.引入jarcompile group: 'org.apache.poi', name: 'poi', version: '4.0.1'compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.0.1'2.假设csv的格式如下所示3.转换代码如下所示public List getCsvData(){...原创 2020-03-03 15:23:12 · 742 阅读 · 0 评论 -
Angualr集成arcgis
刚接触这个arcgis,做个记录;特别是angular中引入;1.需要引入esri-loader来加载map,view以及图层等用到的模块;在package.json中添加引用的包:"esri-loader": "^2.13.0"2.开发具体的地图,这里先以点图为例首先页面的html元素内容:<div #mapViewNode></div>然...原创 2020-02-11 19:04:33 · 750 阅读 · 0 评论 -
k8s常用命令
1>根据关键字查询关键字前后100行kubectl -n namespace logs -f xxxnode | grep -100 '关键字'2>在所有的命名空间查询kubectl get po --all-namespaces | grep xxxx3>查看pod的状态,通常在pod状态异常的时候使用kubectl -n namespace desc...原创 2020-01-20 17:40:32 · 1345 阅读 · 0 评论 -
K8s中pv和pvc的使用
在我们的应用中可能经常有文件存储的需求,在docker的部署中,我们是通过将容器中的目录直接挂载到宿主机的目录上来解决这个问题的,那么k8s部署的方式肯定有所不同,k8s因为是多节点的,每个pod挂载的是对应节点的某个目录,这个会导致节点数据的一致性问题;在k8s中主要通过pvc的方式进行文件的挂载管理;1.PVCPVC 的全称是:PersistentVolumeClaim(...原创 2020-01-20 17:28:52 · 5229 阅读 · 1 评论 -
SpringBoot k8s部署
工作中需要将应用部署到k8s的集群上,之前是使用docker来部署的;这里使用service的nodePort的方式来访问;1.Deployment的配置apiVersion: apps/v1kind: Deploymentmetadata: name: powerflow namespace: powerflowspec: replicas: 2 selector...原创 2020-01-20 11:01:11 · 660 阅读 · 0 评论 -
cas web app docker部署
上篇文章中是通过打包成war包的方式启动的,这篇讲下如何打包成docker镜像,以及打包的过程中遇到的坑1>clone 官方的项目https://github.com/apereo/cas-webapp-docker.git,然后切换到5.3的分支2>打包readme.txt中有打包和运行的命令,打包命令是,这里的#casVersion是版本,比如我要打包5.3的,打...原创 2019-11-27 19:05:23 · 964 阅读 · 0 评论 -
gradle的一些知识
1.buildscript作用在项目中经常看到这样的代码;而且下面又会有一段dependencies代码块;这样子很容易让人奇怪,为什么repositories要声明两次哪?buildscript代码块中的声明与下半部分声明有什么不同?buildscript中的声明是gradle脚本自身需要使用的资源。可以声明的资源包括依赖项、第三方插件、maven仓库地址等。而在buil...原创 2019-10-28 18:55:03 · 143 阅读 · 0 评论 -
Centos安装nodejs
1.下载安装文件先进入到某个目录,比如/usr/local,然后下载文件到当前目录wget https://nodejs.org/dist/v8.11.3/node-v8.11.3.tar.gz2.解压出来tar zxvf /node-v8.11.3.tar.gz3.重命名mv node-v8.11.3 node4.设置环境变量vim /etc/profilei...原创 2018-08-02 16:40:46 · 491 阅读 · 0 评论 -
Linux文件系统
1.磁盘分区格式linux下的磁盘分区不同于windows系统,Linux下的硬盘有两种,一种是IDE硬盘,命名为hda-hdd最多有四个,另外一种是USB硬盘,命名为sda-sdz;具体的磁盘以及分区情况可以通过fdisk -l来查看;如图所示该命令会显示所有的磁盘以及磁盘对应的分区的情况;2.分区可以通过fdisk 命令对分区进行一些操作;fdisk /dev/...原创 2018-08-30 14:14:23 · 655 阅读 · 0 评论 -
maven 的生命周期
maven用的比较多,但是对于maven的生命周期不是很清楚,所以,做个简单的总结记录。Maven生命周期lifecycle由各个阶段组成,每个阶段由maven插件的plugin来执行完成,生命周期主要包括clean,resources,compile,testResource,testCompile,package,install,deploy等;1.Mvn clean install这...原创 2018-08-29 18:00:29 · 10490 阅读 · 0 评论 -
执行jar包中指定main方法
通过maven将应用打成jar包之后,可以通过java -jar ***.jar来执行,会运行指定的main方法,主要是 MANIFEST.MF 中指定的 main 方法;那么如果有多个main方法的时候如何运行指定的main方法哪,可以通过下面命令去执行java -classpath ****.jar ****.****.className [args]这里的****.****指的是...原创 2018-08-29 15:16:38 · 92178 阅读 · 10 评论 -
Linux下的tar压缩解压缩命令详解
tar解压缩命令是Linux中经常会用到的命令,有很多的参数,会在不同的场景下使用;做个简单的总结:1.tar基本命令-c:建立压缩档案-x:解压-t:查看内容-r:向压缩文件中追加内容-u:更新压缩包中的内容这五个是基本的命令,可以和别的命令一起使用,但是这五个中同时只能有一个,下面的参数是可选的-z:有gzip属性的-j:有bz2属性的-Z:有compre...原创 2018-08-28 15:12:52 · 447 阅读 · 0 评论 -
Redis 消息队列和发布/订阅
上篇文章介绍了Springboot集成redis的用法,这篇文章简单介绍下,Redis作为消息队列和发布订阅的简单的应用;如果系统中需要简单的订阅发布功能而系统中没有mq的话,可以考虑使用Redis;1.订阅/发布在redis-cli中可以使用publish来发布消息,使用subscribe来订阅消息;我们可以进行试验一下,在上篇文章中是使用docker启动了redis服务器的容器,可以启...原创 2018-09-02 16:31:50 · 9221 阅读 · 0 评论 -
Java运行脚本命令
记录下通过Java命令来调用shell的方法,简单的记录下;在Java中有时候需要通过调用shell命令来完成对应的操作,之后返回执行的结果进行一些结果的解析,可以使用Runtime.getRuntime().exec()方法来执行shell命令,具体的方法如下:public Process exec(String command) //在单独的进程中执行指定的字符串命令。 pub...原创 2018-08-30 16:41:54 · 3840 阅读 · 1 评论 -
使用hibernate-jpamodelgen生成jpa metamodel
刚到新公司,项目使用Jpa Model,编译各种报错,需要生成各种Course_这样的类,做个简单的记录;1>.需要使用到jar "hibernate-jpamodelgen-5.2.10.Final.jar",这个文件可以通过gradle放在项目目录中,当然,他们是发给我的;2> intellij -> Setting ->Annotation Processor...原创 2018-08-03 15:32:19 · 8301 阅读 · 0 评论 -
设计模式-适配器模式
适配器模式也是常用到的设计模式,算是一种补偿模式,用来在系统后期扩展修改时使用,在详细设计阶段不适合使用;会先简单介绍下适配器模式,以及它的几个部分,最后通过一个例子来简单演示下;1.定义 将一个类的接口转换为希望的另一个接口,适配器模式使得原来由于不兼容而不能一起工作的类可以一起工作;我的理解是,某个类原来没有某种功能,现在希望提供这种功能,那么会将原来的功能,做一个转换...原创 2018-09-27 12:58:59 · 109 阅读 · 0 评论 -
设计模式-策略模式
策略模式是比较常用的设计模式,在Spring中经常使用到,另外,在自己的开发过程中,有时候会遇到很多if/else不同的处理逻辑的时候,也可以使用策略模式来实现;策略模式是对算法的包装,将算法的实现和使用分隔开来,委派给不同的对象去处理,通常把一系列的算法包装到策略类中,作为一个抽象策略类的子类; 策略模式主要由一下几部分组成,这里引用下网上的图1>C...原创 2018-09-27 17:08:31 · 146 阅读 · 0 评论 -
java 内部类
一、为何使用内部类 内部类提供了更好的封装,只有外部类才可以访问,有时候我们不需要外部访问当前类的一些属性和方法,那么可以将这部分定义成内部类,对外隐藏实现; 内部类可以继承类或接口,实现多重继承; 内部类可以直接访问外部类的方法和属性,即使是private的;二、内部类和外部类之间的联系1.>两者是两个独立的实体,并没有is-a这种关系 在编译后,可以发现外部类和内...原创 2018-03-20 23:03:35 · 117 阅读 · 0 评论 -
Docker 命令
总结一些Docker的常用的命令和一些用法,持续补充更新;这里以mysql镜像为例1.拉取镜像docker pull mysql默认会拉取最新的;如果要获取指定的镜像,在后面指定tag的名称;docker pull [OPTIONS] NAME[:TAG|@DIGEST]2.查看所有运行中的容器docker ps3.查看所有的容器,包括未运行的docker ...原创 2018-06-30 13:13:37 · 193 阅读 · 0 评论 -
Springboot Cas 认证的源码解析
上面文章介绍了Springboot如何集成Cas的认证,但是在写代码的时候有一些疑问:1)我们获取认证的内容的时候是SecurityContextHolder.getContext(),那么这里面的内容是什么时候放进去的,放进去的内容是什么?2)我们自定义的userDetailService获取的结果是如何使用的,跟Authentication有什么关系?下面带着这两个问题,跟着源码的...原创 2019-08-26 23:54:29 · 1403 阅读 · 0 评论 -
Cas登录流程
最近的项目中需要使用cas单点登录,做个简单的记录,梳理下整个cas的认证的流程;这里以自己的应用为例;我项目的地址是http://172.26.4.13:9998/1>第一次访问http://172.26.4.13:9998/应用;访问任何一个需要权限的地址,后端的filter会拦截请求,并重定向到cas的地址可以看到这里的状态码302,重定向的地址是https://g...原创 2019-08-24 16:26:32 · 1935 阅读 · 1 评论 -
Springboot集成rabbitmq 实现延时队列
延时队列的需求出现在消息需要延时处理的场景。比如下单之后在30分钟内不支付,超过时间,我们应该去修改订单的状态变成已取消,收回库存;或者设置了某个事情不需要现在处理,要一定时间段后去处理,这种情况都需要用到延时队列; 延时队列的实现方式有很多中,这里只介绍rabbitmq的实现方式;之所以rabbitmq可以做为延时队列是跟他的两个特性分不开的;1>Ti...原创 2019-06-01 23:46:56 · 5252 阅读 · 0 评论 -
Springboot使用docker-compose实现动态配置
Springboot应用在打包的时候我们希望可以在项目启动的时候可以修改application.property或者yml中的配置;而不是在打包docker镜像的时候这个值确定后面不可以修改,这个时候可以通过yml提供的环境变量的功能来实现这个需求; 在yml文件中,通过${Envirment_variable}的方式可以获取系统环境变量中的值;于是可以通过把...原创 2019-06-01 19:30:15 · 10422 阅读 · 0 评论 -
Springboot集成rabbitmq
1>rabbitmq环境通过docker构建的rabbitmq容器;docker-compose 文件如下所示,其中,环境变量配置了rabbitmq的用户名和密码;version: '2'services: rabbitmq: image: rabbitmq:management-alpine container_name: rabbitm...原创 2019-05-27 18:59:22 · 219 阅读 · 0 评论 -
junit-mock测试
在后台接口开发之后,有必要进行单元测试,可以保证代码的交付质量,同时重构代码得时候,也可以更放心大胆;但是在测试的时候,对于一些不需要的服务,需要使用mock测试来mock函数或者方法;文章做个简单的记录,主要总结下mock,spy的区别,injectMocks的用法,以及PowerMock的使用来解决静态方法的mock;1.mock和spy的区别两者都可以注解到某个属性上...原创 2018-12-10 18:54:13 · 2461 阅读 · 0 评论 -
AtomicBoolean使用
AtomicBoolean是java.util.concurrent.atomic的原子变量的类;可以看到下面还有很多类似的Atomic这样的类,如下图所示这样的类具有原子性,在多线程的环境下使用是线程安全的;举个例子,在多线程环境中,我们通过判断一个boolan变量的值,然后修改该变量的值,之后进行操作;存在一个问题就是,多个线程可能都读到该变量的值是符合条件的,然后都去修改了变量的值;...原创 2018-07-31 19:41:56 · 15228 阅读 · 0 评论 -
Spring 事务隔离级别和传播行为
Spring的事务隔离级别和事务的传播行为是面试中经常考察的问题,做个简单的总结。1.传播行为在SpringBoot中通过Transactional的propagation属性来指定,Transactional注解的具体源码如下所示public @interface Transactional {@AliasFor("transactionManager")String val...原创 2018-07-27 18:02:05 · 17136 阅读 · 0 评论 -
Linux命令总结
Linux命令在Java后端的面试过程中,还是非常重要的,当然对于日常的使用也是需要掌握的,做个简单的总结1.修改文件权限chmod ABC File其中A B C 分别代表User、Group、Other的权限;用数字来表示,这个数字是有三位0,1二进制组成,每一位分别表示角色的读、写、运行的权限;1表示允许,0表示不允许;比如说对某一个用户User,如果让这个用户对于文件是:...原创 2018-07-14 10:33:07 · 108 阅读 · 0 评论 -
Java 泛型
泛型包括泛型类,泛型接口和泛型方法原创 2018-05-26 13:28:03 · 1163 阅读 · 0 评论 -
hash冲突的解决方法
先简单了解下哈希函数和哈希冲突的概念。哈希函数:在元素关键字k和位置p之间建立一种映射关系f,使得f(k) = p;创建哈希表时,通过哈希函数将元素k存在地址为f(k)的位置;查找元素也是通过哈希函数找到元素的存放位置,然后取出值;哈希冲突:关键字的集合很多的时候,就有可能将两个关键字k1,k2的哈希函数计算结果相等,k1和k2的值肯定不能存放在同一个位置,就产生了哈希冲突;哈希冲突是不可避免的,...原创 2018-05-21 22:46:07 · 1454 阅读 · 0 评论 -
Spring json忽略空值
jackson: serialization.write_dates_as_timestamps: false default-property-inclusion: non_null原创 2018-05-18 23:44:40 · 13008 阅读 · 3 评论 -
SpringBoot 三行代码实现图片上传和预览功能
fff原创 2018-05-14 23:31:30 · 27580 阅读 · 7 评论 -
Java集合类List、Set、Queue、Map实现类
1.Collection Collection最基本的集合接口,一个Collection代表一组Object的集合public interface Collection<E> extends Iterable<E> {任何实现Collection接口的类,都必须实现iterator方法来提供遍历集合中的元素Iterator<T> iterator();例如...原创 2018-03-11 23:13:14 · 5633 阅读 · 0 评论 -
java中array,arrayList区别
1.Java中的数组1.数组在内存中是连续存储的,索引速度非常快,赋值和修改元素比较简单;2.声明数组的时候,必须制定数组的长度,数组的长度过长,会内存浪费,过短会数据溢出的错误;3.数组只允许存放一种数据类型2.ListList是接口,与set一样继承子集合类Colllection接口,提供了按索引访问的方式。有两个实现分别是ArrayList和LinkedList1>ArrayList ...原创 2018-03-11 19:03:32 · 1415 阅读 · 0 评论 -
Class.forName和classloader的区别
Class.forName和classloader的区别原创 2018-05-15 22:57:53 · 997 阅读 · 0 评论 -
Jackson使用
Java处理JSON数据有三个比较流行的类库FastJSON、Gson和Jackson,其中Jackson在序列化和反序列化的性能表现都是很好的;下面是一些常用的Json注解@JsonProperty可以关联json字段到java属性,可以作用在属性或者getter和setter方法上;当标记属性时,可以对属性字段重命名;标记方法时,可以把json字段关联到属性的getter和setter方法。@...原创 2018-03-18 22:25:38 · 890 阅读 · 0 评论