交换两个的方式有很多种。最经典的借助一个临时变量,或是通过“异或”来是实现,当然还有 Python 中优雅的 a, b = b, a
。但 Python 的这种不借助临时变量实现交换实际是巧妙的利用了“操作栈”,这属于语言层面上的特性技巧,不再我们的讨论范围。
今天就来说一下,为什么我建议使用临时变量来实现交换,而不是使用“异或”。尽管这看起来并不“高级”。
交换两个的方式有很多种。最经典的借助一个临时变量,或是通过“异或”来是实现,当然还有 Python 中优雅的 a, b = b, a
。但 Python 的这种不借助临时变量实现交换实际是巧妙的利用了“操作栈”,这属于语言层面上的特性技巧,不再我们的讨论范围。
今天就来说一下,为什么我建议使用临时变量来实现交换,而不是使用“异或”。尽管这看起来并不“高级”。
都知道 Java 是通过垃圾回收来实现自动管理内存。
那么主流的到底有多少款垃圾回收器呢?不同的垃圾回收器使用到了什么垃圾回收算法,以及是如何定位“垃圾”对象的?如何通过 GC 日志来进行 JVM 调优?…
虽然说在进行数据库设计的时候就应该尽可能的考虑以后的业务发展,但是有时候再严密的考虑也赶不上变化,同时设计太多没有意义的预留字段也不是一个好的方案。所以无法避免的,我们偶尔会遇到需要修改线上表结构的情况。
那么对于一个提供 7 * 24 服务的 InnoDB 的 MySQL 而言,以什么方式修改线上表结构才是安全的呢?
深入理解 Java 对象到底是什么。
分布式系统通常会存在单个的微服务故障问题,而复杂业务中往往涉及层层调用,当其中一层或者几层服务发生故障,最终可能会导致整个系统故障,即产生服务雪崩效应。
Hystrix 的作用是针对微服务故障发生时进行服务降级、服务熔断。
今年早些时候,阿里分享了其官方的 Java 开发手册,宣称是阿里长期以来的经验总结,大概翻看了一遍确实很有参价值。
如果每个团队开发在开发之初订立这样的一份开发准则,先不说 review 和对接时间会大大减少,效率提高。至少看风格统一的项目心情都要好上不少。
阿里对外发布这样一份开发手册,看起来是不满足于规范团队,而是想为了增强社区代码规范性作贡献。
这是我的 MyBatis 学习笔记的第四篇:深入了解 MyBatis 的动态 SQL 。
相信自己使用过拼接字符串的方式来实现动态 SQL 的读者都知道,那简直是个噩梦,因为要处理很多边缘逻辑。
例如当没有条件的时候要消除 “WHERE” ,第一个被查询的条件不能拼接 “AND “ | “OR “ ,拼接一个列表的时候要消除最后一个 “,” … 但是使用 MyBatis 却十分简单。
我感觉分布式几乎是在这小半年间成为了行业标配。越来越多的主流框架也在 README 里面增加各种并发相关的 Benchhmark ,来突显自己在高并发场景的卓越性能。甚至连 Python 都开始出现不少异步 Web 框架,API 设计还和 Flask 高度一致,大大降低了将整套系统切换成异步的成本。
再回过头来说为什么高并发越来越被重视,以前主流的多进程/多线程是怎么了,遇到了什么瓶颈了吗?怎么大家一下子都在往异步的方向发展,往高并发的极致方向走。
这是我的 MyBatis 学习笔记的第三篇:深入了解 MyBatis 之 ResultMap 。
Update your browser to view this website correctly. Update my browser now