知识篇
写代码砌砖头
写代码,改变世界!
展开
-
制作一个简单的任务队列(使用阻塞队列)
充分利用阻塞队列的特性,队列中没有任务时,让线程阻塞。代码如下:import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/** * @Author river66 * @Date 2020/10/25 8:37 */public class MyTaskQueue implements Runnable { private static final Bloc原创 2020-10-25 09:47:55 · 311 阅读 · 0 评论 -
如何将git分支中的某一些commit转移到主分支上
基础git命令如下:1、git branch查看本地分支以及当前所在的分支(有*标记的)2、git log 或者 git reflog查看commit提交的信息记录3、git fetch origin 远程分支名称: 本地新分支名称拉取远程分支代码到本地,并成为一个新的分支4、git branch --set-upstream 本地分支名 远程分支名新拉取的本地分支是不能上传到远程分支上的,需要设置上传流(set-upstream),否则将本地分支代码push到远程分支上.原创 2020-07-30 20:50:06 · 1078 阅读 · 0 评论 -
git命令:reset和revert的区别
reset:回退到某一个历史版本;(回滚到某个commit)revert:重做某一个历史版本(回滚某个 commit)假如有三个提交,A-->B-->C(head-->master):1、reset B变为:A-->B;2、revert B变为:A-->C。reset命令介绍(原文)当要回退到某一次提交的状态时,可以使用git reset命令。git reset [--soft | --mixed | --hard] [<commit>.原创 2020-05-23 13:00:30 · 1276 阅读 · 0 评论 -
为什么Lambda表达式这么重要?(java8新特性)
一个很重要的一点是:C/C++语言是有函数指针的,函数指针可以作为一个参数传给一个方法,而java是没有这个特性的。为了解决这个问题,Lambda表达式就出来了!Lambda表达式的核心就是函数式接口。什么是函数式接口?一个接口中只定义了一个抽象函数,称为函数式接口。为什么需要函数式接口?我们知道,java中方法是不能作为参数传给另一个方法的。方法的调用是需要引用载体的(类、对象...原创 2020-03-13 21:30:13 · 1350 阅读 · 0 评论 -
Zuul的使用(路由器)
什么是Zuul?Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器。为什么需要Zuul?一个项目是由多个微服务组成的,每一个微服务对应的地址和端口(ip、port)都是不一样的。这个对于客户端来说,访问会变得繁琐。这时,就需要统一的URL来负责反向代理这些请求,实现路由功能。Zuul的使用如下:一、添加依赖 <dependency> ...原创 2020-03-12 09:39:14 · 285 阅读 · 0 评论 -
断路器Hystrix的使用
什么是Hystrix?Hystrix是Netflix所创造的一个库,这个库实现了断路器的功能。为什么需要断路器?假设有3个服务,分别为:A、B、C,其中A调用B,B调用C,即:A-->B-->C当C不可用时,会导致调用链中的级联失败,发生雪崩效应,如下:A——>B——>CA——>B——>CA——>B——>C红色为服务不...原创 2020-03-10 11:33:05 · 699 阅读 · 0 评论 -
Feign的使用(声明式REST客户端)
什么是Feign?Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Sprin...原创 2020-03-09 12:51:04 · 184 阅读 · 0 评论 -
Ribbon的使用
一、Ribbon是什么?Ribbon是一个客户端负载均衡器。也就是说,在请求其他微服务的时候(集群),由Ribbon通过一些算法决定访问哪一个微服务。这些算法有:轮询算法(默认)、随机算法等。二、如何使用Ribbon?1、添加依赖(Eureka的依赖中已经包含了Ribbon)<!--包含了Ribbon依赖--><dependency> <gro...原创 2020-03-04 21:54:17 · 1422 阅读 · 0 评论 -
将微服务注册到Eureka上
1、新建一个springboot项目,并添加如下依赖:2、配置application.yml文件server: port: 8091eureka: client: service-url: defaultZone: http://localhost:8090/eureka/ #配置Eureka的服务地址 instance: appname...原创 2020-02-24 16:03:53 · 998 阅读 · 0 评论 -
Spring Cloud 服务发现组件Eureka的使用
搭建Eureka服务的步骤如下:1、新建一个springboot项目,并添加如下依赖:2、配置yml文件原创 2020-02-23 21:24:20 · 142 阅读 · 0 评论 -
Mybatis缓存(一级缓存、二级缓存和自定义缓存)
简要说明:1、Mybatis缓存分为一级缓存和二级缓存。在没有配置的情况下,默认开启一级缓存,不开启二级缓存。2、如果配置开启二级缓存,会先查询二级缓存,没有的话再查询一级缓存。(原理)一级缓存(同一个SqlSession)一级缓存具有和sqlsession一样的生命周期,看下如下例子:/** * @author river * 2020/2/11 */@Spring...原创 2020-02-12 16:12:46 · 778 阅读 · 0 评论 -
Controller的测试(MockMvc的使用)
控制层接口的测试,可以用浏览器、PostMan或者Idea自带的工具(Tools-->HTTP Client-->Test RESTFul Web Service)进行测试都可以。当以上方式都不容易进行的测试的时候,可以使用MockMvc对象,mock 对象就是真实对象在调试期间的代替品。下面介绍下MockMvc的简单使用:Controller的方法如下: @...原创 2020-01-30 18:30:33 · 1083 阅读 · 0 评论 -
jpa的使用(spring-data-jpa)
源码地址:https://github.com/bigBigRiver/redis.git相比于Mybatis,jpa的使用方便简洁,功能也很强大,也是springboot的集成模块里的!当然,Mybatis也有它的优点,比如灵活等,各有各的好!一个是看个人的喜欢,一个是看公司使用的技术栈,多掌握一门技术总是好的!JPA、hibernate和spring-data-jpa的关系。JPA...原创 2020-01-21 12:28:19 · 424 阅读 · 0 评论 -
java开发——Comparable、Comparator怎么用?
先看这两个接口最明显的区别:参数的个数不同public interface Comparable<T> { public int compareTo(T o);//一个参数}public interface Comparator<T> { int compare(T o1, T o2);//两个参数}Comparable英文意思:可以比...原创 2019-02-22 10:09:09 · 509 阅读 · 1 评论 -
java开发——静态成员类和非静态成员类如何选择?
区别:是否有static修饰内部class原则:优先考虑使用静态成员类 相比于非静态成员类,静态成员类的优势有:1、内嵌类的实例可以独立于外围类的实例而存在。2、内嵌类和外围类的实例之间没有关联,减少时间和空间的开销。3、当外围类实例符合垃圾回收时,可以被回收掉。如果使用的是非静态成员类则不行。 什么情况下使用非静态成员类呢?如果内嵌类的实例需要用到外围...原创 2019-02-22 17:25:11 · 834 阅读 · 0 评论 -
java开发——什么时候使用枚举类型?为什么要用枚举类型?
对于什么时候使用,下面举四个例子:1、一周有多少天?7天。像这样固定不变的一组数据,如果我们的程序有需要用到这“7天”的相关信息,例如:发工资分为工作日和周末,可以考虑使用枚举类型。2、太阳系有多少个行星?8个。当我们需要计算每个行星的表面重力的时候,像这样我们需要用到固定不变的一组信息中的每一个元素携带了不同的信息,可以考虑使用枚举类型。3、计算器中的基础运算符。加减...原创 2019-02-28 11:46:14 · 12250 阅读 · 0 评论 -
java开发——Apache Mina的使用
Apache Mina是一个NIO库,实现非阻塞式通讯。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。使用步骤:1、配置Maven2、配置spring3、实现编码工厂ProtocolCodecFactory 4、继承编码器适配器ProtocolEncoderAdapter 5、实现解码器ProtocolDecoder ...原创 2019-02-19 17:10:08 · 2930 阅读 · 0 评论 -
java开发——为什么要使用泛型?用Object不行吗?
答案是可以的!也就是说泛型可以实现的功能,用Object也是可以实现的。那为什么还要使用泛型呢?因为泛型有如下优点:1、无须类型强转,提高效率,避免了强转出错。2、通配符"?"的使用提高了程序的阅读性。3、限制通配符(<? extends T>、<? super T>)提高了程序的健壮性。所以,可以使用泛型就尽量使用泛型吧! 下面举例说明一下第...原创 2019-02-25 15:55:31 · 5847 阅读 · 1 评论 -
java开发——enum枚举单例的使用
代码如下:public enum Factory { INSTANCE; private static String factoryName = "大江南北股份有限公司"; public static String getFactoryName() { return factoryName; } public String ge...原创 2019-02-20 14:39:25 · 153 阅读 · 0 评论 -
java开发——为什么要重写equals()和hashCode()方法?
结论:1、重写equals()是为了实现自己的区分逻辑。2、重写hashCode()是为了提高hash tables的使用效率,以及和equals()保持一致(看下面hashcode的第三点)。举例:1、String重写Object的equals方法2、HashSet是如何保证存储的元素不同的?首先明白这两个方法是什么来的?equals()和hashCode()是...原创 2019-02-20 17:38:11 · 8181 阅读 · 3 评论 -
java排序算法整理
转自:https://www.cnblogs.com/0201zcr/p/4763806.html冒泡算法:一次遍历找到剩余无序元素的最值放到最后,交换完成位移。(时间平均复杂度:O(n2))public static void bubbleSort(int[] numbers){ int temp; int size = numbers.lengt...转载 2019-06-21 09:16:00 · 153 阅读 · 0 评论 -
Linux常用命令
创建目录mkdir directoryname创建文件touch fileName使得配置文件生效source configName显示当前目录pwd清空日志文件echo "" > filename查看CPU和内存使用情况top(ctrl+c:结束查看)查看端口是否被进程占用netstat -tunlp|grep 端口号查看tomc...原创 2019-09-01 22:05:58 · 134 阅读 · 0 评论 -
面向对象的7个设计原则
一、单一职责原则一个类只负责一个功能领域中的相应职责,如果这个类的代码需要改变的时候,只有一个引起它变化的原因。例如:我们操作数据库的持久层,如UserDao。那么UserDao变化的原因只能是访问数据库User表的需求发生了改变。好处就是尽可能高的实现了代码的复用。因为我们程序的任何地方需要使用的User表中的数据时,我们只要引入UserDao即可。二、开闭原则对扩展开放,对...原创 2019-09-04 11:22:52 · 212 阅读 · 0 评论 -
java开发——Cloneable接口、clone()方法和深浅拷贝
1、实现Cloneable接口表明该类的对象是允许克隆的。2、允许克隆的意思是:可以调用clone()方法。3、深拷贝还是浅拷贝,取决于如何重写Object的clone()方法。4、原对象和克隆对象的关系: 深拷贝:阳关道和独木桥; 浅拷贝:藕断丝连。上面的第二点解释一下,如果没有实现Cloneable就调用clone()方法,会抛出异常。看下Obj...原创 2019-02-21 14:43:06 · 6181 阅读 · 9 评论