单链表和反转
数据结构第一节就是链表。链表由多个node节点组成,每个node节点包含数据和一个指针。指针指向下一个节点。 组装链表经常问单链表的算法,那你首先要定下来链表的结构,而不是直接思考算法。为了方便使用,我们固定一个哨兵作为头节点。数据节点都在头节点之后。 12345678910/** * @author Ryan Miao */@Datastatic class Node { //是否是head节点。 true-YES private Boolean head; private Integer data; private Node next;} 那么,我们创建的一个节点是这样的 1234567Node head = new Node();head.setData(-1);head.setHead(true);Node node = new Node();node.setData(123);node.setHead(false); 所以,我们首先要创建一个数组1 2 3 4 5 6 7 8 9。 1234567891011121314151 ...
Java基础之Synchronized原理
思维导图svg: https://note.youdao.com/ynoteshare1/index.html?id=eb05fdceddd07759b8b82c5b9094021a&type=note 在多线程使用共享资源的时候, 我们可以使用synchronized来锁定共享资源,使得同一时刻,只有一个线程可以访问和修改它,修改完毕后,其他线程才可以使用。这种方式叫做互斥锁。 当一个共享数据被当前正在访问到线程添加了互斥锁之后,在同一时刻,其他线程只能等待,直到当前线程释放该锁。 synchronized可以添加互斥锁,并且保证被其他线程看到。 synchronized的三种应用方式synchronized关键字最主要有以下3种应用方式,下面分别介绍 修饰实例方法,作用于当前实例加锁,进入同步代码钱要获得当前实例的锁 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码块前要获得给定对象的锁 synchronized作用于实例方法我们设置类变量static为共享资源, 然后多个线程去修改。修改 ...
Java复习3-类的继承
前言本次学习面向对象设计的另外一个基本概念:继承(inheritance)。这是Java程序设计中的一项核心技术。另外,还要学习反射(reflection)的概念。 继承类、超类、子类123public class Manager extends Employee{ //...} 关键字extends表明正在构造的新类派生于一个已存在的类。已存在的类称为超类(superclass)**、基类(base class)或父类(parent class); 新类称为子类(sbclass)、派生类(derived class)、孩子类(childe class)**. 覆盖方法子类继承父类的字段和方法,但有些方法子类想要修改,可以使用**覆盖(override)**。 12345678910111213141516171819202122232425262728293031323334353637383940414243public class Employee { private String name; private int sal ...
Java复习2-对象与类
回顾基础知识过程中遇到的感觉需要记录一下的知识点。 封装我们设计的class应当尽可能的高内聚,体现为封装的程度。一个class的属性应该只能自己修改,其他class都只是与本class沟通,而不应该有能力修改。比较常见的一个问题是Date属性。 业务开发中经常需要设计class的日期属性,比如birthday, createDate等。 12345678public class User { private String name; private Date birth; public Date getBirth() { return this.birth; }} 我经常设计一个entity,填入字段,然后就直接getter, setter出去,尤其使用lombok后,更是连生成都改自动了。按照封装的要求,这样的做法是不合适的。因为其他class可以获取Date对象,Date对象是可变的。那么,就有可能会产生日期被修改的可能。 如果项目有引入Findbugs的扫描,这个class肯定会被扫描出来的 ...
Java复习1-数据类型
数据类型整形 type 存储 取值范围 int 4字节 -2 147 483 648 ~ 2 147 483 647 (超过20亿) short 2字节 -32 768 ~ 32 7677 long 8字节 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 byte 1字节 -128 ~ 127 关于范围的计算,1字节=8位。 1byte 即8个1和0的组合范围。 需要记住int是4个字节,32位。 浮点类型 type 存储 范围 float 4字节 -2^128 ~ +2^127 有效位6~7位 double 8字节 -2^1024 ~ +2^1023 有效位 15位 double数值精度是float的两倍,绝大部分都应该采用double而不是float。 字符charchar用来表示单个字符,Java中采用16位来表示,即2个字节。但现在unicode字符长度已经超过了65536,一个char并不能完全覆盖所有的字符。所以,通常不要用char,而是string,否则会有 ...
SpringCloud学习6-如何创建一个服务消费者consumer
上一节如何创建一个服务提供者provider已经启动了一个provider的server,提供用户信息查询接口。接下来,我们启动另一个provider,由于是同一台机器本地测试,我们换一个端口 1--server.port=8084 通过启动传参数覆盖port。这样,我们就有两个provider实例了。接下来,可以使用我们consumer负载均衡的消费这两个provider。 升级eureka依赖eureka之前的pom依赖过期了,需要修改为 1spring-cloud-starter-netflix-eureka-server 同样的,所有的client都要修改为 1spring-cloud-starter-netflix-eureka-client 创建一个consumer工程创建一个子模块。 https://github.com/Ryan-Miao/spring-cloud-Edgware-demo/tree/master/consumer-demo 配置基本和provider一致 12345678910111213141516171819202122 ...
SpringCloud学习5-如何创建一个服务提供者provider
前几篇主要集中在注册中心eureka的使用上,接下来可以创建服务提供者provider来注册到eureka。 demo源码见: https://github.com/Ryan-Miao/spring-cloud-Edgware-demo/tree/master/provider-demo 为了方便版本控制,接下来的项目都是基于https://github.com/Ryan-Miao/spring-cloud-Edgware-demo 这个parent配置的。 创建子moudle provider-demo创建一个子module,项目名叫provider-demo. 填充springboot和springcloud依赖 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455<dependencies> <!--springboot 依赖start--> <dependency> <gro ...
CentOS安装Redis
123456//如果没有yum源wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm -ivh epel-release-6-8.noarch.rpmyum install -y http://rpms.famillecollet.com/enterprise/remi-release-6.rpmyum install redis 启动 123service redis start ornohup redis-server > /dev/null 2>&1 & 客户端 1redis-cli 配置文件 1/etc/redis.conf 修改为允许远程连接 12bind ip注释掉protected-mode no 打开防火墙端口, 123vim /etc/ ...
Hexo next主题使用gitment评论
之前关闭的关闭,翻墙的翻墙,最后选择了Hypercomments,最近发现全部收费了。只好再换,想来github总不会挂了。于是转用gitment. 如何使用可以参照官网 https://github.com/imsun/gitment#get-started 我的修改过程首先,注释掉Hypercomments的配置。然后找到 12345678910111213gitment: enable: true mint: true # RECOMMEND, A mint on Gitment, to support count, language and proxy_gateway count: true # Show comments count in post meta area lazy: false # Comments lazy loading with a button cleanly: false # Hide 'Powered by ...' on footer, and more language: # Force language, or au ...
SpringCloud2.0入门3-新的eureka依赖
前言SpringCloud2.0推出有一段时间了,是要学习1.5+还是从2.0开始?犹豫的原因是资料不全,目前现有的资料大部分是1.0的。但作为学习者,肯定要学习最新的。不如,先试试。 搭建Eureka注册中心关于Eureka的介绍,前文《SpringCloud入门1-服务注册与发现(Eureka)》已经学习过了。这次主要针对2.0重新刷新一下。 Maven or Gradle看官方文档,可以看出spring是特别希望大家都转gradle的,我也用了一段时间,最后发现国内这个真不流行。这次转为maven构建。 项目搭建新建一个springboot项目,添加eureka server的依赖。 项目地址: https://github.com/Ryan-Miao/spring-cloud-demo/tree/master/eureka-server 123456789101112131415161718192021222324252627282930313233<properties> <project.build.sourceEncoding>UT ...