consul安装使用
安装安装环境: Mac 我参照官网下载,然后解压,然后添加到PATH,并不能用。最终使用brew安装成功。 1brew install consul 安装成功后,文件位于/usr/local/Cellar/consul/. 启动1consul agent --dev 停止直接ctrl+c
ArrayList源码阅读
前言数组是我们最常用最简单的数据结构,Java里对数组做了一个简单的包装,就是ArrayList,提供自动扩容的功能。 最常用法list在我们日常代码中最为常用的做法是创建一个list,放入数据,取出数据。如下: 1234567891011121314@Testpublic void testList(){ final List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("a"); final String one = list.get(0); final int size = list.size(); Assert.assertEquals("a", one); Assert.assertEquals(4, size);} 下面,将从构造函数开始读 ...
Java对象的序列化和反序列化
前言序列化和反序列化看起来用的不多,但用起来就很关键,因为稍一不注意就会出现问题。序列化的应用场景在哪里?当然是数据存储和传输。比如缓存,需要将对象复刻到硬盘存储,即使断电也可以重新反序列化恢复。下面简单理解序列化的用法以及注意事项。 如何序列化Java中想要序列化一个对象,必须实现Serializable接口。然后就可以持久化和反序列化了。下面是一个简单用法。 项目测试代码:https://github.com/Ryan-Miao/someTest/blob/master/src/main/java/com/test/java/serial/TestSerialize.java 我们给一个测试类: 123456789101112131415161718192021222324package com.test.java.serial;import lombok.Builder;import lombok.Data;import java.io.Serializable;/** * @author Ryan Miao */@Data@Builderpublic class Foo ...
HashMap原理概述
前言还是需要从头阅读下HashMap的源码。目标在于更好的理解HashMap的用法,学习更精炼的编码规范,以及应对面试。 它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。 面试官: 说说HashMap的原理答: HashMap是通过哈希表的数组链表实现的。内部维护一个Node数组, 当put时,计算key hash后的值当做索引。如果数组中该位置为null,则放入value。然后判断是否需要扩容,返回null。 如果数组上已经有元素,判断hash和key是否相等,相等就表示找到node节点了,不相等则判断该元素是TreeNode还是普通Node。 如果是TreeNode, ...
hexo 博客支持PWA和压缩博文
PWA1yarn add hexo-offline 然后在root config.yml里新增 12345678910111213141516# offline config passed to sw-precache.service_worker: maximumFileSizeToCacheInBytes: 5242880 staticFileGlobs: - /**/*.{js,html,css,png,jpg,gif,svg,eot,ttf,woff,woff2} - /lib/**/*.js - /lib/**/*.css - /images/* - /js/src/**/*.js stripPrefix: public verbose: true runtimeCaching: - urlPattern: /* handler: cacheFirst options: origin: cdn.bootcss.com 然后添加manifest.json, 比如我使用了 hexo-theme-ne ...
springmvc-download-file
前言最近严查security, 导致原来暴露出去的s3不能用了,不允许public的s3,暂时的折中方案是自己做跳转。于是需要在SpringMVC中实现文件下载功能。 关于文件存储的设计文件存储通常用作对象存储,业界标准就是AWS s3, 国内的七牛也差不多。不想自建的话,采用这种第三方存储是很方便的。但是,有写地方需要注意。 安全问题就像这次整改遇到的,权限问题大概是对象存储必须具备的。s3的权限特别多和复杂,可以做到认证user访问; 指定ip访问; 指定IAM Role访问; 指定第三方登陆比如Facebook,google的认证,设置自己的认证,这里是指Cognito。 地址路径的健壮性review代码的时候发现了几个严重的问题,地址问题尤为重要,简直就是bug一样。首先,db存储的文件路径不应该包含域名前缀,像这次整改图片存储就导致以前db里的数据不能用了。db只能存储相对路径,即当指定改类型前缀后,变化的部分路径。。 然后就是 需要一个域名,对于公开的地址,需要一个域名来维护,而不是直接指定当前的文件服务器。比如一个公开的s3可能是这样的:https://mybucket ...
lombok的基本使用教程
前言lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码。在很多工具类的项目中都有这个功能。比如dagger。 通俗的说,lombok可以通过注解来标示生成getter settter等代码。我们自然可以通过编译器比如IDEA的Generate生成,为啥要用这个? 在项目开发阶段,一个class的属性是一直变化的,今天可能增加一个字段,明天可能删除一个字段。每次变化都需要修改对应的模板代码。另外,有的class的字段超级多,多到一眼看不完。如果加上模板代码,更难一眼看出来。更有甚者,由于字段太多,想要使用builder来创建。手动创建builder和字段和原来的类夹杂在一起,看起来真的难受。lombok的@Builder即可解决这个问题。 引入引入就是加入lombok的jar包。 在maven中直接加入依赖 12345<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <v ...
IntelIj IDEA运行JUnit Test OutOfMemoryError
好久没看到OutOfMemoryError这种错误了,今天跑测试的时候发现总是报错。针对IDEA需要修改几个配置。 JUnit Test在运行前,IDEA会build整个项目,这个是喜欢eclipse的人最讨厌的地方,因为即便是别的不相干的类没配置好,我的Test也不能跑。我的错误正好是build的时候出现内存不够的。 修改build内存位置Settings -> Compiler -> Build process heap size (MB), 原来默认是800m,修改2048M后,错误消失。 修改运行时内存针对当前运行的Test,你需要配置运行内存。 1Run -> Edit Configurations... 设置 -XmxNNNm to VM Options. For example: 1-ea -Xmx1024m The “-ea” means “enable assertions”. If your unit test(s) can’t run in a 1GB of memory then it’s possible that you have a me ...
git pull fails “unable to resolve reference” “unable to update local ref”
问题由于有人rebase了分支,或者不知道怎么搞的。其他人拉取代码的时候,发现拉不下来。 123456>git fetcherror: cannot lock ref 'refs/remotes/origin/xxx-branch': is at 8117caf7b1c88b2d5dfebd7581f6891d87b9abee but expected f38e8d35ae8ea7f177c537a98f4140dd76b8e2bdFrom xxxxxxx-git-url ! f38e8d35..9d7b8e7a xxx-branch -> origin/xxx-branch (unable to update local ref) 解决方案尝试clean本地git 12$ git gc --prune=now$ git remote prune origin man git-gc(1): git-gc - Cleanup unnecessary files and optimize the l ...
使用ControllerAdvice注意事项,Ambiguous @ExceptionHandler method mapped for [class org.springframework.web.bind.MethodArgumentNotValidException]
前言ControllerAdvice非常好用,可以把系统内部的异常统一处理。用起来也很简单。比如,http://www.cnblogs.com/woshimrf/p/spring-web-400.html 而Spring提供了一个base类ResponseEntityExceptionHandler,可以使用这个来处理。但用的时候要注意,不要重复定义异常捕获,对于base里已经定义好的,只要overwrite就好,不要重复声明异常拦截。 以下来自stackoverflow 问题123456789101112131415161718192021222324252627282930313233@ControllerAdvicepublic class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { private Logger log = LoggerFactory.getLogger(RestResponseEntityExceptionHandler.class) ...