让MySQL支持含数字的自然排序

在实际应用中,我们经常需要对数据进行排序,比较常见的是根据ID、时间进行排序。

另外一种场景,就是当排序的字段是字符串,而且字段值中部分为数字时。
此时,我们希望排序后的结果是,数字部分能够按照数字的自然顺序进行排序。
对于这种场景,MySQL默认的排序方式可能会有问题。 … [阅读文章]

TCP协议之网络延时

影响TCP 网络时延的因素 硬件速度 网络和服务器的负载 请求和响应报文的尺寸 客户端和服务器之间的距离 TCP 协议的技术复杂性 TCP协议产生的时延 TCP 连接建立握手; TCP 慢启动拥塞控制; 数据聚集的 Nagle 算法; 用于捎带确认的 TCP 延迟确认算法; TIME_WAIT … [阅读文章]

你能数到多少?

几则故事 1. 谁说出的数字最大谁赢

有这么一个故事,说的是两个匈牙利贵族决定做一次数数游戏——谁说出的数字大谁赢。

一个贵族说,“好,你先说吧!”。

另一个贵族绞尽脑汁想了好几分钟,最后说出了他所想到的最大数字:“3”。

现在轮到第一个动脑筋了。苦思冥想了一刻钟以后,他表示弃权说:“你赢啦!”。 … [阅读文章]

《成长型思维》从平凡到优秀的七种思维模式

成长型思维是斯坦福大学行为心理学教授卡罗尔·德韦(Carol Dweck) 在其《终身成长》 (MindSet) 一书中提出的一个概念和一种心智模式,她将人的思维方式区别为“固定型思维” ( Fixed Mindset)和“成长型思维”。

固定型思维 … [阅读文章]

《软件随想录》读书笔记

近期读了一本书,名字叫做《软件随想录》。这本书的写作风格比较特别,特别之处在于它是由网志整理而成,因此在目录的排版方面不像一般的书籍那么有逻辑,它的目录更像是网志的一种归类。由于是网志,文章相对随意些,不一定会给你标准的答案或特定的结果,而更多的是引导读者去思考,或者给读者提供一个解决问题的思路。 … [阅读文章]

Java普通对象创建之流程图分解

1.加载类

传送门:Java类加载过程之流程图分解

2.为对象分配内存

对象所需内存的大小在类加载完成后便可完全确定。 相当于把一块确定大小的内存从Java堆中划分出来。 指针碰撞(Bump the Pointer)

假设将堆划分为两部分,左边为已使用内存,右边为空闲内存。(堆内存规整) … [阅读文章]

计算机任何工程领域的问题,都可以通过增加一个中间层来解决

计算机任何工程领域的问题,都可以通过增加一个中间层来解决。

例如:

L1、L2、L3解决了CPU访问内存的性能问题;

LVS、Nginx解决了负载均衡,高可用问题;

CDN解决访问量大造成的服务端性能和带宽压力,提升用户访问体验;

Java虚拟机的中间码实现了代码一次编写,可处处运行; … [阅读文章]

掌握这些,你也能徒手实现ArrayList、Vector和Stack

今天我们要学习的,是数组这种数据结构在JDK集合中的应用。

数组作为最简单的一种线性结构,操作也比较简单。虽说简单,但它却是编程语言底层实现不可缺少的。

它的特点是,按索引随机查找快,插入和删除比较慢。因为按照索引可以直接定位到某个元素,而插入或删除通常会涉及到数据的迁移。 … [阅读文章]

Times 33 哈希算法

一个好的散列函数通常倾向于“为不相等的对象产生不相等的散列码”。理想情况下,散列函数应该把集合中不相等的实例均匀地分布到所有可能的散列值上。要想完全达到这种理想的情形是非常困难的。幸运的是,相对接近这种理想情形则并不太困难。

由Daniel J. … [阅读文章]

五年程序员人生的点点滴滴(旧文)

      和大家一样,我也是一名普通的程序员,很快工作五年了。现在依然记得大学时软件工程老师曾说过的一句话,大概是这样的:“工作五年之后,就基本可以分出大家的区别了”,这句话大概有两层意思,第一,大家都基本确定了自己的工作或职业方向;第二,一个人的能力如何基本已经确定了。先抛开这句话的真理性,至少它本身是有些道理的,当然随着时间的迁移,当初的五年时间对于现在可能已经不太准确了。但这句话一直陪伴着我,每过一段时间,我就会想起这句话,因为自己很想知道五年之后自己是什么样子,总告诫自己一定要找准方向,要努力学习,让自己在合适的时间能有质的飞跃,能够在同行同辈之中脱颖而出,在工作或事业上形成一个转折点。愿望总是美好的,而正因为有了美好的愿望,人类才能够不断向前走。 … [阅读文章]

Linux下查找文件的一些应用场景

在实际应用中,我们经常会遇到各种查找文件的需求,比如:
查找最新的n个文件
查找包含某字符串的文件
查找昨天修改的文件
查找同级目录下,不同文件的最新一个文件(类似于数据库的分组查询场景:按名称分组,查询最新的文件)
等等
有木有?
 
 
 … [阅读文章]

程序员必备:Linux日常维护命令

    对于程序员来说,掌握一些基本的Linux命令是必不可少的,即使现在用不到,在不久的将来也应该会用到。由于Linux有很多命令,每个命令基本可以用一篇文章介绍,所以本文仅总结一些常用命令的常用用法,如有明显的遗漏或错误,请各位帮忙指出,谢谢!
 … [阅读文章]

JVM之卡表(Card Table)

我们知道,JVM在进行垃圾收集时,需要先标记所有可达对象,然后再清除不可达对象,释放内存空间。那么,如何快速的找到所有可达对象呢?

最简单粗暴的实现,就是每次进行垃圾收集时,都对整个堆中的所有对象进行扫描,找到所有存活对象。逻辑是简单,但性能比较差。 … [阅读文章]