精选PDF版本书籍第一期
福利概述精选JAVA必读书籍的PDF版本(来源于网络,侵删)。
Effective java 中文版(第2版)
Head First 设计模式(中文版)
Java并发编程的艺术
Java技术手册(第6版)
Java性能权威指南
Maven实战
Netty实战 Netty IN ACTION
Spring Boot实战
Spring揭秘
深入理解Java虚拟机(第2版) JVM高级特性与最佳实践
扫描下方公众号,回复001获取。解压密码:clawhub
LeetCode|344. 反转字符串
题目描述
等级: 简单
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例1:
12输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]
示例2:
12输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]
思路对于数组与指针的考察。数组 ...
LeetCode|350. 两个数组的交集 II
题目描述
等级: 简单
给定两个数组,编写一个函数来计算它们的交集。
示例1:
12输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]
示例2:
12输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。
进阶:
如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪种方法更优?如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
思路对于hash与数组的考察。
求两个数组并集,并且每个元素出现次数应与元素在两个数组中出现的次数一致,所以想到用map存储元素与其出现的次数。对于示例1:
首先迭代num1,获取map1:
123元素 : 出现次数 1 2 2 2
再迭代num2,判断map1中是否存在,出现次数大于0。如果确定,则将此元素加入到结果res数组中,并将map1中相 ...
LeetCode|371. 两整数之和
题目描述
等级: 简单
不使用运算符 + 和 - ,计算两整数a 、b之和。
示例1:
12输入: a = 1, b = 2输出: 3
示例2:
12输入: a = -2, b = 3输出: 1
思路对于位运算的考察。
在位运算中,异或操作获取的是两个数的无进位和,异或:相同为0,不同为1。如,
123452^3 0010^ 0011------- 0001
我们知道,2+3=5,5的二进制是0101。前面已经知道了无进位和,下面获取进位的数:看a&b
123452&b 0010& 0011-------- 0010
发现结果左移1位就是最终结果的进位数:
10010 << 1 = 0100
0100再异或0001:
1234 0100^ 0001------- 0101
这样循环操作,直到进位数为0。
答案12345678func getSum(a int, b int) int { for b != 0 { temp := (a & b) << 1 a = a ^ b b ...
对于分布式Job的思考
引言在清理Github的时候,发现以前写的一个简单的分布式任务分发系统ClawHub/task-distribution,使用了zk的选主与队列,调度器使用spring的ThreadPoolTaskScheduler,任务支持cron表达式。
这让我想起在这之前还封装过Quartz,那时候做的是单机版超大型应用,内部需要做调度系统。
目前在公司使用过Elastic-Job,也使用过Spring自带调度与ZK的结合,还有公司Boss系统提供的配置版本任务调度。
写这篇文章主要是简单的回忆一下Quartz与Spring的ThreadPoolTaskScheduler,还有Elastic-job。再写一下自己对分布式Job的思考。
1、quartz官网地址:quartz-scheduler.org
1.1、简单使用maven的pom文件:
12345<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId&g ...
分布式ID方案SnowFlake雪花算法分析
1、算法SnowFlake算法生成的数据组成结构如下:
在java中用long类型标识,共64位(每部分用-分开):0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 0000000000 00
1位标识,0表示正数。
41位时间戳,当前时间的毫秒减去开始时间的毫秒数。可用 (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69年。
5位数据中心标识,可支持(1L << 5) = 32个数据中心。
5位机器标识,每个数据中心可支持(1L << 5) = 32个机器标识。
12位序列号,每个节点每一毫秒支持(1L << 12) = 4096个序列号。
2、Java版本实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 ...
LeetCode|387. 字符串中的第一个唯一字符
题目描述
等级: 简单
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
1234567案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2.
注意事项:您可以假定该字符串只包含小写字母。
思路对于字符串和Hash表的考察。首先遍历一遍字符串中字符,用Hash表存储字符与其出现的次数。再遍历一遍字符串中的字符,当碰到第一个出现次数为1的字符时,返回响应的索引位置。如果都没有,返回-1。
答案12345678910111213func firstUniqChar(s string) int { count := map[int32]int{} for _, v := range s { oldCount := count[v] count[v] = 1 + oldCount } for k, v := range s { if count[v]==1{ return k } ...
LeetCode|412. Fizz Buzz
题目描述
等级: 简单
写一个程序,输出从 1 到 n 数字的字符串表示。
如果 n 是3的倍数,输出“Fizz”;
如果 n 是5的倍数,输出“Buzz”;
如果 n 同时是3和5的倍数,输出 “FizzBuzz”。
示例:
123456789101112131415161718192021n = 15,返回:[ "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]
思路对于字符串的考察,对于这道题直接用最简单的思路处理了,如果碰到复杂的问 ...
分布式ID生成方案汇总
1、目标1.1、全局唯一不能出现重复的ID,全局唯一是最基本的要求。
1.2、趋势有序业务上分页查询需求,排序需求,如果ID直接有序,则不必建立更多的索引,增加查询条件。而且Mysql InnoDB存储引擎主键使用聚集索引,主键有序则写入性能更高。
1.3、高可用ID是一条数据的唯一标识,如果ID生成失败,则影响很大,业务执行不下去。所以好的ID方案需要有高可用。
1.4、信息安全ID虽然趋势有序,但是不可以被看出规则,免得被爬取信息。了解到一个有意思的事情:基于MAC地址生成UUID的算法造成的MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位置。
2、常见方案介绍2.1、UUIDUUID(Universally Unique Identifier)是最简单的生成方案了:
1UUID.randomUUID().toString()
生成形如:e811b49b-9ac1-47dc-8ab9-98fa7dd861d0的8-4-4-4-12的字符串。
优点
简单
性能好
全球唯一
缺点
无序
不能标识出此ID的含义,不可读。
字符串太长且无序,作为MySQL主键,影响性能。
2. ...
私藏免费可商用图片网站分享
福利概述分享两类资源:
随机返回高清大图
免费可商用网站
1、自动切换随机返回高清图片https://source.unsplash.com/collection/collectionid/1600x900
https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture
2、免费可商用图片授权类型:
Commercial Use:可商业使用的相片。
Non-Commercial:不得用于商业用途。
Public Domain:公有领域授权。
CC0 授权(Creative Commons Zero,公众领域贡献宣告)
https://uploadbeta.com提供开放的API,可编程。
https://unsplash.com免费高质量照片网站,照片都是真实的摄影,照片分辨率很大,可用来做网页素材,值得收藏。
https://www.pexels.com所有支持下载的图片,免费用于商业用途。
https://stocksnap.io免费精美图片分享站,超高品质,可商用,完全免费。
htt ...