猫头鹰的深夜翻译:理解java的classloader

2018-07-26
阅读 10 分钟
2.8k
Java ClassLoader是java运行系统中一个至关重要但是经常被忽略的组件。它负责在运行时寻找并加载类文件。创建自定义的ClassLoader可以彻底重定义如何将类文件加载至系统。

猫头鹰的深夜翻译:spring事务管理

2018-07-23
阅读 6 分钟
2.8k
大多数时候,开发者极少关注事务管理从而导致大量代码需要重新开发,或是实现事务的时候没有注意事务究竟是如何实现的以及在这些场景中需要关注的维度。

记录分布式一致性中的几个概念

2018-07-14
阅读 3 分钟
1.9k
事务中包含的各项操作在一次执行过程中,只允许出现全部执行成功或是全部不执行两种状态。任何一项操作失败都将导致整个事务失败,同时其他已经被执行的操作都将被撤销并回滚。

猫头鹰的深夜翻译:Pattern: Service Mesh

2018-07-11
阅读 5 分钟
3.2k
在十几年前,我们无法想象一个分布式系统会是什么样子。它给我们带来了全新的架构思路,但同时也引入了一些问题。当时这些系统非常少有而且架构简单,工程师们通过尽可能的减少远程交互的方式降低复杂度。解决分布式问题最好的方法是尽可能的避免分布式系统,尽管这意味着会有大量重复的逻辑分布在不同的系统上。

深入理解依赖注入

2018-06-04
阅读 5 分钟
3k
相信所有面试java开发的童鞋一定都被问到过是否使用过Spring,是否了解其IOC容器,为什么不直接使用工厂模式,以及究竟IOC和DI区别在于哪里这种问题。今天就结合JAVA语言,解释一下究竟是如何衍生出DI模式,以及其在Spring中的实现。

跨域问题的一次深入研究

2018-05-24
阅读 7 分钟
6.6k
最近在业务代码中深受跨域问题困扰,因此特别写一篇博客来记录一下自己对跨域的理解以及使用到的参考资料。本文的项目背景基于vue+vuex+axios+springboot。涉及以下内容:

vue-cli的项目结构

2018-05-16
阅读 8 分钟
3k
这篇文章对纯新手友好,所以有过任何vue开发经验的人可以出门左转啦!这篇文章献给我的homie苏蕾儿童鞋,让她在学习vue项目的时候少走一点弯路(径直冲向末路哈哈哈)。

树状结构存储与读取之Modified Preorder Tree

2018-05-07
阅读 8 分钟
5.1k
一直以来存储树状结构都采用经典的结构<id,pid>的组合,即每一个节点持有其父节点的ID,并由此构成完整的树状结构。但是这样的结构在遇到大量的查询时会成为严重的性能瓶颈,因为它涉及了对数据库的递归查询。因此我查找了一下网上的各种层次结构的存储方式并决定对其分别实现。本文将通过MySQL+MyBatis+SpringBoo...

Leetcode309. Best time to sell stock with cooldown

2018-05-06
阅读 2 分钟
2.7k
和前面几题相比,这题还增加了一个限制条件,也就是说我们在抛出股票之后,还需要冷却一天才可以买入下一只股票。那么我们进行什么样的操作才能使收益最大呢?

在Centos上搭建Maven中央仓库

2018-04-17
阅读 5 分钟
4.7k
在这里使用yum来安装java的jdk,可以使用指令yum search java | grep jdk来查看yum下提供了哪些jdk版本。这里选择1.8版本,安装指令为:sudo yum install java-1.8.0-openjd

bash指令学习与整理

2018-04-16
阅读 5 分钟
3.1k
指令的历史记录位于~/.bash_history文件中,可以使用cat指令查看。需要注意的是,它存储的是上一次登录时执行过的命令,而这一次登录中执行的命令将先暂存在内存中 Tab键可以用来补全命令或是提示可选的操作 \可以用来换行增强指令的可读性 将根据环境变量PATH来寻找指令,可以使用echo $PATH来查看环境变量 在命令执行...

猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换

2018-04-12
阅读 5 分钟
3.1k
一组设备无关的坐标被用来将所有的坐标信息传递给Graphics2D对象。AffineTransform对象作为Graphics2D对象状态的一部分。该对象定义了如何将用户空间的坐标转化为设备空间的设备相关的坐标点。

leetcode306. Additive Number

2018-04-01
阅读 2 分钟
3k
这里涉及一个广度优先遍历,首先尝试所有合适的第一个数字和第二个数字,然后在此基础上继续判断后序的字符串是否是一个Additive Number。

leetcode315. Count of Smaller Numbers After Self

2018-04-01
阅读 4 分钟
2.9k
输入一个整数数组nums[i],返回所有一个新的数组count,该数组第i位上的count[i]表示nums[i]右侧小于nums[i]的数字的个数。

leetcode 329. Longest Increasing Path in a Matrix

2018-03-29
阅读 2 分钟
2.1k
这里采用广度优先算法加上缓存的方式来实现。我们可以看到,以一个节点作为开始构成的最长路径长度是确定的。因此我们可以充分利用之前得到的结论来减少重复遍历的次数。

重拾Java Network Programming(四)URLConnection & Cache

2018-03-28
阅读 11 分钟
2.6k
前言 本文将根据最近所学的Java网络编程实现一个简单的基于URL的缓存。本文将涉及如下内容: HTTP协议 HTTP协议中与缓存相关的内容 URLConnection 和 HTTPURLConnection ResponseCache,CacheRequest,CacheResponse WHAT & WHY 正常来说,服务器和客户端的HTTP通信需要首先通过TCP的三次握手建立连接,然后客户端再...

leetcode 338. Counting Bits

2018-03-25
阅读 2 分钟
2.9k
这里除了暴力的计算每个数字中含有多少个1,我们可以使用动态规划的方法来计算i中有几个1。假设我们已经知道前i-1个数字分别有多少个1,而且i中含有k个数字,那么其实很容易的想到,i中1的个数等于前k-1位构成的数字的1的个数,加上第k位1的个数,即1或是0。还有一种等价的思路是第0位的1的个数(0或是1)加上1~k位构成...

leetcode 321. Create Maximum Number

2018-03-25
阅读 3 分钟
2.9k
首先采用分治法的思路,我们知道这K个数字中,必然有i个数组来自nums1,而剩下的k-i个数字必然来自nums2。那么问题变成从nums1中获取i个数,这i个数构成的数字最大,且这i个数字的相对位置不变。再从nums2中获取k-i个数,这k-i个数构成的数字最大,且这k-i个数字的相对位置不变。

重拾Java Network Programming(二)InetAddress

2018-03-24
阅读 7 分钟
2.8k
今天,我将梳理在Java网络编程中很重要的一个类InetAddress以及其相关的类NetworkInterface。在这篇文章中将会涉及:

重拾JAVA线程之获取另一个线程的返回

2018-03-24
阅读 9 分钟
5.4k
Java的多线程机制允许我们将可以并行的任务分配给不同的线程同时完成。但是,如果我们希望在另一个线程的结果之上进行后续操作,我们应该怎么办呢?

重拾Java Network Programming(一)IO流

2018-03-23
阅读 9 分钟
2.3k
网络节点(node):位于网络上的互相连通的设备,通常为计算机,也可以是打印机,网桥,路由器等等烧入网卡,从而确保没有任何两台设备的MAC地址是相同的。IP地址:网络地址,由ISP供应商决定。包交换网络(packet-switched network):数据被拆解为多个包并分别在线路上传输,每个包包含发送者和接收者的信息。协议:节点...

初探Java Socket

2018-03-18
阅读 10 分钟
3.4k
前言 本篇文章将涉及以下内容: IO实现Java Socket通信 NIO实现Java Socket通信 阅读本文之前最好了解过: Java IO Java NIO Java Concurrency TCP/IP协议 TCP 套接字 TCP套接字是指IP号+端口号来识别一个应用程序,从而实现端到端的通讯。其实一个套接字也可以被多个应用程序使用,但是通常来说承载的是一个应用程序的...

leetcode 312. Burst Balloons

2018-03-17
阅读 3 分钟
2.7k
这里讲了一个炸气球小游戏的规则。当我们选中一个气球并炸掉它后,会得到该气球以及其相邻两个气球的分数的乘积,并加入我们的积分。之后该气球将消失,从而其左右两个气球成为相邻的气球。问如何选择气球才能使得积分数最高。

leetcode 328. Odd Even Linked List

2018-03-17
阅读 2 分钟
1.9k
将一个链表中的节点按照奇数位上的节点在前,偶数位上的节点在后重新排序。这里需要注意的是节点之间的相对顺序不可以改变。即1->2->3->4不可以变为1->3->4->2,只能是1->3->2->4。

猫头鹰的深夜翻译:Volatile的原子性, 可见性和有序性

2018-03-15
阅读 4 分钟
3k
为什么要额外写一篇文章来研究volatile呢?是因为这可能是并发中最令人困惑以及最被误解的结构。我看过不少解释volatile的博客,但是大多数要么不完整,要么难以理解。我会从并发中最重要的一些因素开始说起:

leetcode 300. Longest Increasing Subsequence

2018-03-14
阅读 2 分钟
3.3k
找到整数数组中最长的递增子数组。该子数组可以为不连续的。如题目中例子所示,[10, 9, 2, 5, 3, 7, 101, 18]得到的最长子数组为[2,3,7,101]。

leetcode 343. Integer Break

2018-03-14
阅读 1 分钟
2.1k
这里应用了一个数学的思路。假设我们有一个数字n,该数组可以随机分解为t和n-t。当分解为n/2时可以获得最大的乘积。因此t取n/2时可以得到最好的结果。但是这里我们明显还可以继续对t分解(如果t大于1),这样逐个分解之后终归会分解为2或者1为质因数

猫头鹰的深夜翻译:Java中的CAS(Compare And Swap)

2018-03-14
阅读 2 分钟
1.8k
在我们深入了解CAS(Compare And Swap)策略以及它是如何在AtomicInteger这样的原子构造器中使用的,首先来看一下这段代码:

leetcode295. Find Median from Data Stream

2018-03-13
阅读 2 分钟
2.1k
这里采用了两个优先队列来实现。一个优先队列用来存储字符流中较小的一半,另一个用来存储字符流中数值较大的一半。这样当需要获取当前中位数时,就可以根据当前的数值个数选择一个或是两个数的平均值。

leetcode318. Maximum Product of Word Lengths

2018-03-13
阅读 2 分钟
1.8k
这道题的重点在于如何优化字符串的比较。直观的来说,我们无法避开复杂度为O(n^2)的循环因为必须进行两两比较才能识别出最大的乘积。但是我们可以优化字符串的比较。