自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Clifnich

新知、旧闻和工程经验

原创 单元测试解耦数据库 - 依赖注入和 Mockito

单元测试与数据库结偶 - 依赖注入和 Mockito 基本背景 团队开发任务中涉及一个移动应用的 Java 后端,以增删查改 (CRUD) 为主,附加一些其他的服务逻辑。系统的持久层是用一些以 DAO 做名字结尾的类构成的。每一个 DAO 里面实现了增删查改的具体实现,一般模式是获得一个 Hibe...

2020-06-01 11:44:26 140 0

原创 通过依赖注入解决的小程序启动问题

这篇文章通过一个实际工作的例子说明“依赖注入”的一个具体作用,欢迎大家点评。 基本背景 微信小程序启动时会生成一个 App 对象,开发者在各个页面中可以通过 getApp() 方法来调用到它,所以它有共享数据的作用。小程序的启动从 App.onLaunch() 函数开始,在这个函数运行结束以后,g...

2020-04-24 11:54:02 139 0

原创 WebSocket 简单搭建

WebSocket 是在 HTTP 更上一层的通信协议,适合对于实时通信要求比较高的场景。比如微信聊天,当用户还在 APP 停留的时候,有消息就要能够接受到。服务器是一个被动接收请求再回复的技术,如果要让客户端在信息刚产生的时候就收到的话,就需要客户端不断地请求。这种 polling 的方法比较消...

2020-02-11 11:23:10 33 0

原创 落乎团队的远程开发协作方法

落乎工作室 成立于 17 年底,致力于服务有落户上海需求的留学生。在所有成员都是挤出业余时间来贡献的条件下,到 2020 年我们已经累计有过万的用户,正常工作时间的日活也能有 100-200. 这两年中我们增加了一些成员,现在大家分布在全球 3 个时区,个人觉得在这种情况下还能保持生产力是很不容易...

2020-02-07 14:44:05 208 0

原创 程序中的时间处理和 Java Calendar

当你的业务逻辑涉及多时区的时候,时间的处理就会变得比较麻烦。平时我们算时差就有一些障碍,更不用说在讲究精确的计算机世界了。有些地方的时差会变,比如美国有夏令时 (Day Time Saving Off) 和冬令时 (Day Time Saving On),夏令时的时候美国东部和中国是 12 个小时...

2019-11-23 02:52:39 59 0

原创 常用 Vim 配置和命令

将制表符(tab)转换成四个空格 四个空格可以保证代码、文件在不同系统上都能够呈现类似的排版。我们可以在 ~/.vimrc 中加入如下内容。 set ts=4 sw=4 这个配置来自 StackExchange,点击前往。 ...

2019-11-08 02:44:44 41 0

原创 Ubuntu/Linux 实用命令

检查端口使用情况 sudo lsof -i -P -n | grep LISTEN

2019-11-07 11:38:25 28 0

原创 VirtualBox 实用指南

学习工作中积累了一些 VirtualBox 的使用指南,这里写一个总结。 克隆虚拟机、和主机共享文件夹 这份手册 对于 Ubuntu 16.04 上的这些设置有比较详细的说明。 拓展存储空间 虚拟机磁盘不够了,需要先从主机给它分配更多空间,然后把这部分空间合并到原有的分区中。 这篇文章介...

2019-10-23 01:28:38 62 0

原创 Docker 简单命令

列出所有镜像 $ docker images 关闭所有镜像 $ docker stop $(docker ps -q) 在 busybox 镜像中运行 echo 命令 $ docker run -it busybox echo "hello from docker&qu...

2019-10-04 22:52:29 41 0

原创 微信客服信息解密

官方给的代码示例只处理 XML 数据,有网友问 JSON 怎么办。这篇博文给出一下加密的例子,读者可以看到,只要稍作修改即可: public String decryptMsg(String msgSignature, String timeStamp, String nonce, String...

2019-09-27 09:50:10 99 0

原创 关系型数据库设计注意点

避免冗余 冗余在不经意间就会发生。受登记表格的影响,可能会想在一张数据表里存放比较多的内容。比如要做一个学生宿舍借钥匙的数据表的话,会有如下设计: mysql> desc key_loans; +----------+--------------+------+-----+---------...

2019-09-16 12:26:52 49 0

原创 luowho 团队的 Git 实用手册

说是手册,其实就是一些 git 使用中的心得,放在这里跟大家分享讨论一下,欢迎批评指导。 彭书记的 merge master 大法 // 要 merge master 分支的时候,参考彭书记的方法可以逐步解决可能出现的冲突 $ git checkout master $ git pull --re...

2019-07-10 13:37:16 56 0

原创 2019 江苏省高考作文 | 美国多样性

2019 江苏省高考作文 试题内容: 根据以下材料,选取角度,自拟题目,写一篇不少于800字的文章;除诗歌外,文体自选。 物各有性,水至淡,盐得味。水加水还是水,盐加盐还是盐。酸甜苦辣咸,五味调和,共存相生,百味纷呈。物如此,事犹是,人亦然。 作答。 美国多样性 从“五月花”号开始,北美大陆接收了...

2019-06-24 13:44:59 432 0

原创 Union Find 和一道谷歌面试题

复习经历 继续按照主题刷题。最近一次的中心内容是 union-find 这种数据结构。选择它的原因是我在一次谷歌面试中被问到了这个题,而且当时没有回答出来,这就刺激了我一定要把 union-find 搞懂的愿望。我并不是完全不懂这个数据结构,在斯坦福在 Coursera 中的 Algorithm ...

2019-01-13 05:58:10 278 0

原创 BFS · 广度优先搜索

为什么有这篇文章 近半年经常刷题,也参加了同学们自行组织的刷题会,到写这篇文章为止 leetcode 已经 AC 了 77 道题目了。时常的总结是必要的,而分享知识不仅能帮助自己树立知识脉络,更能帮助到大家,为学习算法的同学们提供一种参考的思路。 广度优先搜索概要 广度优先搜索(BFS)是在搜索中...

2018-12-27 07:31:51 66 0

原创 微信小程序互相跳转的参数传递

背景 业务中产生了跳转到别的小程序的需求,传递参数能够使得这种交互功能更强大,因为很多东西因此能够定制化。微信小程序官方文档 是支持小程序之间的互相跳转以及参数传递的,具体说明写在这里。 微信的文档告诉了我们如何传参数,如图 然而问题出在目标小程序如何获取这份数据。仅仅写明在 App.onLau...

2018-11-24 03:45:37 854 2

原创 网络应用的托管设置以及Nginx反向代理

网络应用是什么 我们都知道什么是app, 就是手机上的一个软件,点开就有很多功能可以使用,这种类型的软件我们称之为“移动应用“(mobile application);而当你打开浏览器浏览各种网页、进行各种操作的时候,你就是在使用网络应用(web application). 网络应用的很多功能依...

2018-06-18 21:49:34 204 0

原创 screen 命令和 shell 脚本基础

问题背景 如果你要运行一个时间很长的 job 你会怎么办?这个问题可以转变为当一个任务运行时间非常长,你如何保证操作系统不自动中断它。答案取决与运行环境,如果是台式机 + windows 的桌面系统就注意一下人离开的时候锁屏,而不要注销用户或者关机即可;而当你使用 Mac 或者远程连接 Linu...

2018-05-26 00:00:36 1156 3

原创 Python 数组与 RGB 颜色的关系

实验的前提条件本文会出现一些编程实验,有兴趣实践的读者需要首先确保自己的开发环境安装了Numpy 和 cv2 包,如果没有的话,可以通过:pip install numpy pip install cv2来进行安装。语境中的Python数组数组是Python 语言原生支持的数据结构,直接用方括号声...

2018-04-29 16:04:54 11101 0

原创 Spring 框架入门 - 自动类映射

简介 在Java EE逐渐没落的今天,Spring框架依然保持着强大的生命力。面试题中经常有它的身影,所以我就感觉到了学习的必要性;了解并实践了一些以后,发现Spring框架确实简化了很多问题,比如这篇博客要讲到的自动类映射,原来需要手动在业务代码里一行一行敲的内容由框架帮忙完成了,代码量减少了...

2018-03-18 23:45:33 613 0

原创 阿里密码题

除夕夜家里周围都是鞭炮声,朋友圈在看春晚,阿里技术公众号的新年密码题可谓是一股清流;在假期的懒惰氛围中,终于找到了一个动脑子的机会,让我十分想解开它。再加上程序员节(10月24日)的时候,类似的密码题目出现过一次,我挺感兴趣,却没有仔细研究。这次的题目乍一看是一个套路,于是我决定不能错过这次机会,...

2018-02-17 19:55:09 379 0

原创 如何制定软件开发计划

计划的重要性相信各位读者都不会忽略,事情不论大小都有提前计划的必要。晚上约吃饭,要准备一下着装,找餐厅,揣摩邀请的说辞;对于软件开发这样一个高度复杂的脑力劳动来说,清晰、可执行的计划当然是必不可少的。这篇文章我会分享一下我在制定软件开发计划中的一些心得,有些计划是做在整个项目之前的,有些计划是做在...

2017-12-26 14:51:56 4175 0

原创 技术债

总结一下今天排查出的一个bug Technology Debt 如何发现bug最近屡次有用户报告在我的网络应用上登陆失败,我听到这个感觉很不可思议,因为我的代码逻辑就是直接转发给第三方验证机构,我作为一个中介应该是最不应该出错的地方。所以我的第一反应就是用户输入了错误的用户名和密码。跟一些用户...

2017-11-30 21:30:06 414 0

原创 Webster重现

-1. 计算周期的总损失时间 LLL=n⋅li+AR L = n \cdot l_i + AR nn 为一个周期内的相位数,lil_i 是相位ii 的启动损失时间,这里假设li=3l_i = 3, ARAR 是全红时间,这里AR=0AR = 0.对于小寨十字,有3个相位,所以有 L=9 L = ...

2017-11-18 19:24:43 343 0

原创 谈谈竞态条件

什么是竞态条件官方的定义是如果程序运行顺序的改变会影响最终结果,这就是一个竞态条件(race condition). 理解竞态条件首先要知道程序运行不一定是线性的。初学编程的时候都是从“面向过程编程“开始的,一条一条指令打下来,期待着他们会顺序执行。debug的使用也加深了这一认识。不过事实上如果...

2017-11-05 09:38:10 6189 0

原创 卫星影像处理中间件开发报告

为什么要做这个东西项目简介同济的同学有一个分析卫星遥感图像的科研项目,他为图像的分析设计了一种新的算法,能够推荐原先的研究。他的算法是用Matlab实现的,涉及一些矩阵的运算。Matlab的计算在图片尺寸较小的时候运行比较顺利,但当图片超过100x100 pixel, Matlab就无法计算,因为...

2017-10-23 23:10:37 356 0

原创 单机配置HBase的心得

为什么要配使用HBase的原因同学的科研中会处理卫星遥感图片,数据量很大,而一台机器的内存和硬盘不够用来处理,所以他的科研成果受到了一定的限制,我打算帮他做一个存储中间件,希望通过一个集群和简单好用的API来帮助提高科研效果。如何配置HBase我相信类似的文章肯定很多了,所以我不需要把我自己的过程...

2017-10-23 19:27:54 1503 0

原创 Mac如何查看JAVA_HOME

JAVA_HOME是很多应用程序需要配置的东西,我安装过很多,每次都要重新上网查怎么找JAVA_HOME, 这里把mac上的方法归纳一下。mac上找JAVA_HOME很方便,把一个脚本跑一下就可以出结果。先进入该路径:cd /usr/libexec然后运行一个叫做”java_home”的脚本:./...

2017-10-21 09:20:38 5601 0

原创 杭州和上海的比较

问题背景智谷趋势上的一篇谈及杭州即将弯道超车上海,作者强调了杭州在新科技方面的成就远超上海,进而把中国杭州湾比喻成新的硅谷,说杭州将是这个新中心的核心城市。而我一直以来是一个“上海痴迷者“,就是觉得上海很伟大,上海永远是最好的,面对一个杭州的挑战,我有一些疑惑,就想验证一下杭州超越上海是不是真的会...

2017-10-15 20:28:59 2860 0

原创 Persistent数据库开发

Persistent数据库不是某个数据库,而是一种性质。一个database 是 persistent的,iff 系统重启以后它原有的数据不会丢失。之前开发的Berkeley DB经常出现死锁现象,后来web application要部署到云端,需要稳定,我就放弃了数据的persistent, 把...

2017-09-21 22:39:54 292 0

原创 手动测试驱动编程

Manual Test-Driven ProgrammingTalk About TDD这个题目的断句应该是用手动的测试来驱动编程。我一直认为TDD就是要自动化测试驱动编程,写每一行代码前都要写好test case. 当然这在Java开发中很容易实现,因为有JUnit,也许自动化测试驱动编程的思想...

2017-09-16 10:02:28 338 0

原创 测试驱动编程的心得

Test-driven programming is the key to many dilemmas while failing to do that is the recipe for many disasters.这句话是我说的。最初接触TDD测试驱动编程的理念是这样的:在你写每一行新程序之...

2017-08-17 21:25:07 454 0

原创 实习日志

2017.8.18TGIF! 谈一下knowledge in the world 和knowledge in the head.The Design Of Everyday Things 一书本应该是讲设计的,但却花了很大的篇幅在讲knowledge in the world 和knowledge...

2017-08-17 20:53:57 534 0

原创 排列组合

分糖果问题:x+y+z=10把y+z当成一个整体。支付宝红包,01和1都不同命令。航空公司 2C2M+N−2C2M=58 2C_{M+N}^2 - 2C_M^2 = 58 宿舍红蓝对战,定义关系为同学u和同学v之间有至少一场比赛。记事本复制粘贴,最长文本长度:多次a+不断粘贴p2p通信,分两组研...

2017-08-16 21:49:14 240 0

原创 编程语言

判断2的幂答案:n > 0 ? (n & (n - 1)) == 0 : false;位运算技巧:n = n & (n - 1)的效果是消除n的最后一个1位。交换值不使用零时变量void swap(int &a, int &b) { a += b; ...

2017-08-12 11:08:04 213 0

原创 算法与数据结构

题1. 求n个数中的最大值和最小值,最少的比较次数是3n2\frac{3n}{2}.解析:最大值和最小值是有逻辑关系的,一个比最大值大的数不需要和最小值去比较;同样,一个比最小值小的数不需要跟最大值比较.将所有数两两分成一组,共n/2组,进行比较值大的归为新的一组tmax,值小的归为另一组tmin...

2017-08-12 10:10:21 300 0

原创 操作系统与分布式

Unix System Call1. mkdir, create a new directory 2. chmod, change a file's mode bits 3. open, open a file for reading or writing 4. close, close...

2017-08-09 22:14:02 443 0

原创 计算机组成原理

实现虚拟存储器最关键的技术是“请求调页“。流水线时间计算公式:一条指令所需时间+(指令条数-1)*时间最长的指令的一段吞吐率公式:指令条数 除以 流水线时间 Cite Here.从CPU体系架构上看,Intel64 CPU的架构和其他的MIPS,ARM和Power不同。Cache不属于冯·诺伊曼体...

2017-08-09 21:30:08 314 0

原创 计算机网络知识点

Internet Protocol有7层。卡车运硬盘问题:相同时间内两种方案要传输相同的数据量。TB/GB, B means byte, 1 byte = 8 bits.TCP’s 5 pts. What is a “Connection”? It consists of four values:...

2017-08-08 21:58:42 253 0

原创 斯坦福算法Specialization的收获

为什么要写这篇文章从5月份开始,我加入了Coursera上的“斯坦福算法Specialization”, 到现在已经完成了两门课,收获颇为丰富。今天想到一个道理:学习是要有产出的,我回顾了一下这几个月的学习历程,程序写得不少,笔记也记了一叠又一叠,总结性的文章却没有怎么写。这篇博文就是要fill ...

2017-07-30 21:03:32 1396 0

提示
确定要删除当前文章?
取消 删除