归档: 2018

有只独角兽想 {要} 你,月薪18K怎么样?

(有内部推荐渠道)欢迎各位JAVA开发、WEB前端加入阿里巴巴20亿战略投资,酒饮新零售独角兽企业 —— 壹玖壹玖酒类平台科技股份有限公司(简称1919)。 招聘信息请看下方的招聘图片说明,欢迎各位大佬加入我们的团队。联系我请加微信 zebe1989 或 QQ 12530487。

详解设计模式 - 工厂模式(3种)

这篇文章作为个人学习备忘笔记,通过生活中的牛奶工厂实例,比对3种工厂模式的不同。 工厂模式一句话总结:只对生产结果负责,不要三无产品。 生活中的工厂例子 小作坊:五花八门什么都能生产,但生产质量和产品种类不一定满足消费者的需求。 专业工厂:遵循一定标准,不生产其他产品,只专注于自己的产品,不断精益求精。 大型国际工厂:专业、高效,无论是产品质量还是产品种类,都能让用户放心。 以上这三种工厂,对应

Java - 局部变量和StackOverflowError

本文目的对Java栈内存进行简单学习总结,并了解 -Xss JVM参数的配置,学会在代码中尽量减少不必要的局部变量声明,从而提高程序效率和编码水平。 Java栈内存简介Java栈内存空间中主要存放的是局部变量,包括基本数据类型(int、short、byte、long、float、double、char、boolean)和引用数据类型。例如:int a = 1 或者 double x = 0.01

Java8 - 更优雅的字符串连接(join)收集器 Collectors.joining

Java8中的字符串连接收集器在JDK8中,可以采用函数式编程(使用 Collectors.joining 收集器)的方式对字符串进行更优雅的连接。Collectors.joining 收集器 支持灵活的参数配置,可以指定字符串连接时的 分隔符,前缀 和 后缀 字符串。 代码参考如下: 1234567891011121314// 定义人名数组final String[] names =

Java8 - 对流(数据)进行自定义分块:partitioningBy收集器

partitioningBy收集器在JDK8中,可以对流进行方便的自定义分块,通常是根据某种过滤条件将流一分为二。 例如:有一组人名,包含中文和英文,在 JDK8 中可以通过 partitioningBy 收集器将其区分开来。 下面是代码例子:1234567891011121314151617// 创建一个包含人名称的流(英文名和中文名)Stream<String> stream

Java8 - 对流(数据)进行自定义分组:groupingBy收集器

groupingBy收集器在JDK8中,可以对流进行方便的自定义分组,就像 SQL 语句中的 groupBy 一样,在JDK8中对应的分组函数是 Collectors 类的 groupingBy 方法。这种特性很有用:把数据拆分成不同的组,可以使处理数据更加灵活方便,在某些情况下例如按需处理、分块处理时更高效。 例如:有一组人名,需要根据首字母(姓氏)进行分组,则可以通过 groupingBy

Java8 - Map更优雅的迭代方式:forEach

BiConsumer用于两个参数之间进行操作的函数式接口是 BiConsumer。这个函数式接口正好用来操作 Map 的 key 和 value。JDK8强化了针对 Map 类的迭代方式,新增了一个默认方法 forEach,它接收一个 BiConsumer 函数。JDK给出的描述如下: Performs the given action for each entry in this map u

Java8 - Map新增的方法:computeIfAbsent

computeIfAbsent这个方法是JDK8中Map类新增的一个方法,用来实现当一个KEY的值缺失的时候,使用给定的映射函数重新计算填充KEY的值并返回结果。computeIfAbsent 方法的JDK源码如下:1234567891011121314151617default V computeIfAbsent(K key, Function<? super K, ? extends

Java8 - 定制归一化收集器(reducing)得到自定义结果集

reducing简介reducing 是一个收集器(操作),从字面意义上可以理解为“减少操作”:输入多个元素,在一定的操作后,元素减少。 reducing 有多个重载方法,其中一个方法如下: 1public static <T> Collector<T,?,Optional<T>> reducing(BinaryOperator<T> op) 以上

(译)Java - null在内存中到底是什么

Java中随时都在使用 null,那么 null 到底是什么?让我们从一个简单的表达式说起: 1String x = null; 1. 这句话的确切含义是什么?回想什么是变量,什么是值。一个常见的隐喻是一个变量类似于一个盒子。就像你可以用一个盒子来存储东西一样,你可以使用变量来存储一个值。在声明变量时,我们需要设置变量的类型。 Java中有两大类类型:原始类型和引用类型。声明原始类型存储值的变量;

(译)Java - 数组的10个常用方法

以下是Java数组中最常用的10种方法,它们是 stackoverflow 中投票最多的问题。 0. 声明数组123String[] aArray = new String[5];String[] bArray = {"a","b","c", "d", "e"};String[] cArray = new String[]{"a","b","c","d","e"

Windows10“许可证即将过期”解决办法

试了很多激活工具、激活码都不行,本文介绍的这个激活方法截止到今日(2018年9月18日)是可行的,亲测通过。 第1步:以管理员模式打开命令提示符号(或者PowerShell)。第2步:在命令窗口中依次输入以下内容(加粗部分): slmgr.vbs /upk:稍等几秒钟,窗口会弹出“成功地卸载了产品密钥”。 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX:稍等几秒

Git多分支开发过程中处理冲突的经验教训

最近在项目开发中遇到一个问题,不同分支的代码产生大量冲突,导致合并麻烦。这也算是一个教训。值得记录下来反思。 不同分支代码的冲突问题已上线分支为 master,我负责的分支为 A,另外有人负责的分支是 B,恰恰因为项目需求的原因,A 和 B 分支上的某个类会被我们同时改动。由于master分支上线的缘故,第二天我需要在自己的A分支上去合并已上线分支master的代码。这时候,出现了问题:我的A分支

2018年9月18日

六点多自然醒来起床,然后去小区跑了接近3公里,边跑步边听我自己录制的政治选择题语音。已经有接近半年没有经常跑步运动了,体重从原来的53KG涨到现在的60KG,慢性咽炎也不见好转,感觉自己的身体素质在走下坡路。 反省自己,确实有很多自己想做的事情,都是三分钟热情,曾经强大的意志力变得很薄弱,总是没有办法把一件事情坚持做下去,反而是想做的事情很多,结果做成的很少。

2018年9月17日

今天回老家教育局去办理了专升本考试现场确认手续,下个月就要考试了。十年前,我在这座县城读高中,十年后,我回到这里报成人高考(专升本级别)。当年,直到如今,我唯一比较擅长的科目是英语 —— 虽然这十年来并没有实质性地提高,但还是有较大的把握在这次的专升本英语考试中,拿个及格分数。 惶然回首,要是当初多努力一点考一个本科,没有那么浪费靑春就好了。这十年里,要是我每天记住1个单词,到今天我的词汇量会额外

Java8 - 转为流为基本数据类型求最大值、最小值、平均值、求和、计数

基本数据类型在高阶函数中的运用众所周知,在Java中使用基本数据类型的性能和产效率远高于包装类型。由于装箱类型是对象,因此在内存中存在额外开销。比如,整型在内存中占用4 字节,整型对象却要占用 16 字节。这一情况在数组上更加严重,整型数组中的每个元素只占用基本类型的内存,而整型对象数组中,每个元素都是内存中的一个指针,指向 Java堆中的某个对象。在最坏的情况下,同样大小的数组, Intege

Java8 - 高阶函数及判断高阶函数的方式

什么是高阶函数高阶函数是指接受另外一个函数作为参数,或返回一个函数的函数。什么样的参数是函数类型的参数?要看该参数是否是一个函数式接口,函数式接口只会有一个方法,会使用 @FunctionalInterface 这个注解来修饰。 高阶函数在 Java8 中很常见,如以下的例子: 1Stream<Integer> numUp = Stream.of(1, 2, 5).map(num -

Java8 - ThreadLocal的Lambda构造方式:withInitial

ThreadLocal的Lambda构造方式Java8中ThreadLocal对象提供了一个Lambda构造方式,实现了非常简洁的构造方法:withInitial。这个方法采用Lambda方式传入实现了 Supplier 函数接口的参数。写法如下: 代码实例1234/** * 当前余额 */private ThreadLocal<Integer> balance = ThreadLo

Java8 - 惰性求值

什么是惰性求值(惰性计算)惰性求值也叫惰性计算、延迟求职,在函数式编程语言中随处可见。可以这样通俗地理解为:不对给出的表达式立即计算并返回值,而是在这个值需要被用到的时候才会计算。这个是个人理解,有关专业的术语定义请参考百度百科:https://baike.baidu.com/item/惰性计算 什么是及早求值(热情求值)和惰性求值相反的是及早求值(热情求值),这是在大多数编程语言中随处可见的一

Java8 - Lambda表达式的5种形式

本文介绍Jave8中Lambda表达式的多种写法形式,一般有五种写法形式。 形式一:这种写法没有参数,用一对圆括号表示。1Runnable noArguments = () -> System.out.println("Hello World"); 形式二:这种写法只有1个参数,可以省略括号,下面的 event 相当于 (event)。123ActionListener oneArgumen

选择了程序员,选择了什么?

过去从前,我是一个很感性的人 —— 用几年不变的Z字头像,喜欢收集悲伤的句子,习惯在QQ空间自问自答,除了有一份莫名的执着,仿佛我的生活被一把大伞遮住了阳光。 那时候,能把一首歌听上百遍,能把十个字就能表达清楚的句子用一万个字来表达,能保存好些年的日记。那时候,我在不断追寻自己,以守护者为名,以鼠标为画笔,试着画出自己的梦想。 守护者之宿命诅咒 七彩凤凰 WindowsXP主题设计 我爱罗 -

搭建 Spring Cloud Eureka Server 高可用注册中心集群

什么是注册中心Eureka Server 在微服务中承担的角色是服务注册中心,也是最最基础的核心设施之一。从“Eureka”单词的含义“我找到了!我发现了!”可以看出,其实 Eureka 就是用来实现服务注册、服务发现的工具,和 dubbo 这类的分布式服务治理框架类似。各种独立的微服务将自己注册到 Eureka Server,Eureka Client 则提供了服务发现的能力。 本文目的Eure

Java - 使用蔡勒公式快速计算某一天是星期几

使用蔡勒公式,只需给出年月日,就可以用该公式来计算任意一个日期是星期几。 请参考以下计算星期几的代码例子: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263/** * 蔡勒公式Java实现例子 * @author

Java - 逢一进一高效分页公式

本文介绍使用Java语言实现的逢一进一高效分页公式: 1int totalPage = (totalCount - 1) / pageSize + 1; 逢一进一在十进制中,每一位有0~9共十个数码,所以计数的基数为10。超过9就必须用多位数来表示。十制数的运算遵循:加法时,“逢十进一 —— 该数位上的数满十就向前一位进一”;减法时,“借一当十 —— 该数位上的数不够减时,就向前一位借一当做十,再

Java - 获取HTTP请求的上下文绝对路径

本文介绍使用Java获取一个请求的完整的 协议名+主机+端口号,如:http://127.0.0.1:14530。获取该地址后,可以设为全局变量(contextPath),在系统页面中作为路径前缀使用。 请参考以下代码片段: 1234567// 获取HTTP请求的上下文绝对路径(完整的协议名+主机+端口号)StringBuffer url = request.getRequestURL(); //

Java - 获取HTTP请求的真实IP

本文介绍使用Java获取HTTP请求的真实IP,包括了对反向代理、代理客户端、多个IP情况的处理。 请参考以下代码片段: 123456789101112131415161718192021222324252627/** * 获取真实IP * @param request 请求体 * @return 真实IP */public static String getRealIp(HttpServletR

Java - 解决在一个线程(或进程)中切换多个账号发送邮件的问题

近期做一个项目中遇到需要使用多个邮箱以负载均衡的方式发邮件(单线程多账号发邮件),遇到一些问题在此做一个记录,主要解决 “501 mail from address must be same as authorization user” 这个错误。 场景有A、B、C三个邮件账户,由于发信量限制原因,程序需要做到在每次向用户发邮件时,交替使用这三个邮箱,实际就是一种简单的负载均衡轮询。我将A、B、C

Java - 使用腾讯企业邮箱发邮件的例子

这篇教程演示使用腾讯企业邮箱发邮件,文中代码已在java8环境下测试通过,文中的帐户名和密码等信息请修改为自己的企业邮箱账号进行测试。 邮件发送器1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Java8 - 使用jdeps —— Java类依赖性分析器

jdeps,即“java dependencies” 的缩写,是Java8中提供的一个工具。 jdeps命令显示Java类文件的包级或类级依赖关系。输入类可以是.class文件、目录、jar文件的路径名,或者可以是完全限定的类名称,以分析所有类文件。jdeps的参数选项决定了输出的内容。默认情况下,JDEPS将依赖关系输出到系统输出(控制台)。它可以用DOT语言生成依赖关系(见 -dotoutpu

Java - 使用Files类一行代码读取文件内容

Files 类是 java.nio 包中的用于操作文件的类,提供了比 java.io.File 类更便捷的操作。其中,Files类的 readAllBytes 方法提供了一个读取所有字节的方法,可以将读取结果很方便地赋值给一个 String。例如以下代码,可以用一行代码实现读取文件的内容,然后赋值给一个字符串: 12345678910111213141516171819202122232425pa

Java - 调用JavaScript脚本的例子

Java中提供了一个脚本引擎管理器:ScriptEngineManager,它会在虚拟机启动时发现可用的脚本引擎。 脚本引擎管理器构造一个 ScriptEngineManager,调用它的 getEngineFactories 方法,可用获取到当前Java环境所有支持的引擎工厂,可用通过循环去获取每个引擎工厂的属性。请参考以下代码: 1234567891011121314public static

MySQL5.6自定义data文件夹路径后无法启动发生系统错误1067 - 解决办法

这篇文章记录一下Windows下MySQL服务无法启动系统错误1067的原因和解决办法。问题很简单,记录很详细,这样有助于提高自己的思维和排查问题的能力。 安装步骤及错误现象我下载了MySQL5.6的ZIP包,拷贝了默认的配置文件 my-default.ini,重命名为 my.ini,并修改配置如下: 123456789101112131415[mysqld]log_bin = mysql-bin

一篇文章掌握二叉树(基础、图例、算法)

这篇笔记详细记录了二叉树的基础知识、运用案例,并配备大量图例便于理解,作为自己复习查阅之用,也适合刚开始学习二叉树的新手作为参考资料。本文内容随时更新直到完结。转载请注明出处,如有不正之处欢迎指出。 什么是二叉树是一种树结构,每个节点最多有 2 个子树,通常子树被成为左子树和右子树,次序不能颠倒。 二叉树的5种基本形态 空二叉树(图a) 只有一个根节点的二叉树(图b) 只有左子树(图c) 只有右

Java - 动态代理例子 - 茶叶代理商

这个例子使用Java的动态代理技术演示了茶叶商家、代理商获取茶叶价格的例子,文章内容仅供加强理解之用,如有描述不妥之处,请参阅其他专业资料。 理解Java的动态代理所谓代理,简单来说就是把一件事情交给别人去做,由别人替你代办。例如银行的代理人、娱乐圈的经纪人、商业中的经销商等等,都是一种代理的行为。 Java中的代理,是一样的道理,屏蔽了对原始对象实例的访问,由代理对象替代真实对象去完成。代理对象

Jenkins-忘记admin或其他用户密码的解决办法

Linux环境中,Jenkins忘记密码的情形分好几种: admin无法登录一种情况是安装了jenkins后,没有立即用admin登录,用的是自己创建的用户,第二次登录时就发现 admin 登录不了(即使默认的初始密码你已经拷贝出来了)。这是因为 jenkins 安装目录下的 users 文件夹中,根本就没有 admin 这个账户。 另外一种情况是:你真的忘记了 admin 的密码。 不用着急,先

Java9 - 模块化简明例子

个人对Java9的模块化的理解个人对Java9模块化的简单理解是:模块是 package 的容器,是 package 的上一层。在模块里,可以输出(管理)当前模块哪些包是对外暴露(exports)的。同样的,当前模块需要别的模块,就要引用(requires)进来。 Java9模块化的例子使用Idea创建一个项目 java-9-module-demo,添加两个模块: module-main:主模

(转)SQLAlchemy-几种查询方式总结

声明:本文转载自 Nob的博客,文章版权归原作者所有。 几种常见SQLAlchemy查询123456789101112131415161718192021222324252627282930313233# 简单查询print(session.query(User).all())print(session.query(User.name, User.fullname).all())print(ses

2018年4月1日

阳光明媚的一天,今天我按照计划一大早就去了四川省图书馆自修,今天主要任务是学习python,为9月的考试做准备。集中时间做一件事情时效率真的很高,截止到下午三点过,我完成了第三章到第九章的学习,再集中一两次就能把剩下的学习完。 自修室人非常多,几乎是座无虚席,经常有人拿着书进来张望看看有没有空座,我庆幸自己来得早,占了一个座位。我旁边的人,我发现有的在为公务员考试做准备,有学习会计的,还有很多学

发送HTTP范围请求获取图像的部分内容

什么是范围请求以前,用户不能使用现在这种高速的带宽访问互联网,当时,下载一个尺寸稍大的图片或文件就已经很吃力了。如果下载过程中遇到网络中断的情况,那就必须重头开始。为了解决上述问题,需要一种可恢复的机制。所谓恢复是指能从之前下载中断处恢复下载。 要实现该功能需要指定下载的实体范围。像这样,指定范围发送的请求叫做范围请求(Range Request)。 对一份 10000 字节大小的资源,如果使用范

SpringBoot关键知识点简要笔记

内容简介本文是个人对 SpringBoot 关键知识点的梳理和简单总结,方便遗忘时回顾。文章内容边学边整理。 关于参数、配置文件(profile)命令行参数是最高加载级别的参数,通过两个连字符指定,如:java -jar demo.jar –server.port=8888。 要添加多个配置文件(profile),添加多个 application-xxx.properties 配置即可,如:

Gradle build.gradle设置

近期学习了Gradle这款比Maven更好用的构建工具,在此记录下 build.gradle 这个文件的配置,里面包含注释,方便将来遗忘时参考。 注:学习Gradle必须对 groovy 语言有一定了解,因为 build.gradle 这个配置文件是基于 groovy 语言的。 123456789101112131415161718192021222324252627282930313233343

你今天的日积月累,早晚会成为别人的望尘莫及

昨晚项目上线,今天8点过才回到家,下午一点被一个电话吵醒,然后就没怎么睡好觉,下午三点过就睡不着,感觉也不是很困,在床上挨到四点多才起来。 下午起床做了饭,晚上边吃饭边在手机上看了部没什么营养的电影,然后就开始完成这个月的学习任务,好不容易有点空闲的时间,这段时间太忙了。 熬夜到现在,Gradle的学习任务完成得差不多了,明天收个尾,把自己的一些个人项目改成Gradle的。说真的,我感觉我可能要

谷歌Guava数学工具类(IntMath、LongMath、BigIntegerMath)

Google Guava包含了功能强大、性能良好的数学工具类,包括整数运算、实数运算、浮点数运算以及其他一些非常有用的运算函数,还包括了针对整数、长整数的溢出校验方法,如果溢出时会快速失败并抛出ArithmeticException。使用好这些工具类,可以直接将其运用在实际项目中,特别是涉及到金额计算的部分,而不用重复造轮子了,更何况我们自己造出的轮子可能比不上google工程师写出的代码水平。

2018年1月4日

来不及总结2017年的旧时光,眨眼间2018年就已经过去4天,岁月不等人,它对所有人都一样公平。 回顾2017年的年度目标,4个目标完成了1个,也是最重要的目标,让自己不再一个人。 新的一年,我预感到肩上的责任,我可能将会承担比往年任何一年都要大的压力,因此需要把自己调整到一个可以面对挑战的状态,心态也需要更加沉稳。 回过来慢慢发现,或许我真的还是没有学会怎么正确的生活和提升自己,再进一步说就是不