自定义博客皮肤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

新知、旧闻和工程经验

  • 博客(123)
  • 问答 (4)
  • 收藏
  • 关注

原创 MySQL 5.5 -> 5.7 升级

三季度我们获得了一台新的阿里云实例,我们准备用它来安装数据报表系统,这样成员们都可以通过这台机器的服务来实时获得我们的业务数据。数据源是老机器上的 MySQL 5.5. 由于该新实例和老实例在不同区域,建立 VPC 需要流量费用[1],我们决定开端口通过互联网把两台机器连接起来。为了对冲由此带来的安全等级降低,我们在建立连接之前先把数据库给升级了。这篇文章介绍升级的操作过程,以及我们的调研细节。升级过程我们在虚拟机上尝试通过 APR 升级数据库[2] 失败了,后来发现通过把 Ubuntu 14 升级成

2020-10-11 04:33:11 321

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

单元测试与数据库结偶 - 依赖注入和 Mockito基本背景团队开发任务中涉及一个移动应用的 Java 后端,以增删查改 (CRUD) 为主,附加一些其他的服务逻辑。系统的持久层是用一些以 DAO 做名字结尾的类构成的。每一个 DAO 里面实现了增删查改的具体实现,一般模式是获得一个 Hibernate Session,运行 SQL Query,再把结果组织一下返回给客户端。由于 DAO 类的这种开发模式,运行 JUnit 单元测试的时候需要环境中有一个配置好的 MySQL 实例,这极大限制了代码包持

2020-06-01 11:44:26 938

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

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

2020-04-24 11:54:02 836

原创 WebSocket 简单搭建

WebSocket 是在 HTTP 更上一层的通信协议,适合对于实时通信要求比较高的场景。比如微信聊天,当用户还在 APP 停留的时候,有消息就要能够接受到。服务器是一个被动接收请求再回复的技术,如果要让客户端在信息刚产生的时候就收到的话,就需要客户端不断地请求。这种 polling 的方法比较消耗资源。WebSocket 通过订阅和分发的模式实现了实时通信,下面我们提供一个代码库来搭建一个简单...

2020-02-11 11:23:10 348

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

落乎工作室 成立于 17 年底,致力于服务有落户上海需求的留学生。在所有成员都是挤出业余时间来贡献的条件下,到 2020 年我们已经累计有过万的用户,正常工作时间的日活也能有 100-200. 这两年中我们增加了一些成员,现在大家分布在全球 3 个时区,个人觉得在这种情况下还能保持生产力是很不容易的,所以想把试过、有效果的工作方法和读者朋友们分享。而且正巧最近由于种种原因,很多人不得不远程工作,希...

2020-02-07 14:44:05 624

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

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

2019-11-23 02:52:39 285

原创 常用 Vim 配置和命令

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

2019-11-08 02:44:44 147

原创 Ubuntu/Linux 实用命令

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

2019-11-07 11:38:25 188

原创 VirtualBox 实用指南

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

2019-10-23 01:28:38 328

原创 Docker 简单命令

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

2019-10-04 22:52:29 133

原创 微信客服信息解密

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

2019-09-27 09:50:10 622

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

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

2019-09-16 12:26:52 223

原创 luowho 团队的 Git 实用手册

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

2019-07-10 13:37:16 176

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

2019 江苏省高考作文试题内容:根据以下材料,选取角度,自拟题目,写一篇不少于800字的文章;除诗歌外,文体自选。物各有性,水至淡,盐得味。水加水还是水,盐加盐还是盐。酸甜苦辣咸,五味调和,共存相生,百味纷呈。物如此,事犹是,人亦然。作答。美国多样性从“五月花”号开始,北美大陆接收了从世界各地到来的移民,首先是从欧洲过来的一些穷苦人民,包括英法、西班牙、德国,还有非洲贩卖过来的黑奴。...

2019-06-24 13:44:59 903

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

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

2019-01-13 05:58:10 682

原创 BFS · 广度优先搜索

为什么有这篇文章近半年经常刷题,也参加了同学们自行组织的刷题会,到写这篇文章为止 leetcode 已经 AC 了 77 道题目了。时常的总结是必要的,而分享知识不仅能帮助自己树立知识脉络,更能帮助到大家,为学习算法的同学们提供一种参考的思路。广度优先搜索概要广度优先搜索(BFS)是在搜索中首先将所处位置的直接邻居访问一遍,再进入下一层重复之前操作的一种搜索。这种算法需要维护一个队列。队列有...

2018-12-27 07:31:51 228

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

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

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

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

网络应用是什么我们都知道什么是app, 就是手机上的一个软件,点开就有很多功能可以使用,这种类型的软件我们称之为“移动应用“(mobile application);而当你打开浏览器浏览各种网页、进行各种操作的时候,你就是在使用网络应用(web application). 网络应用的很多功能依赖于和服务器的交互,大致的过程是你通过浏览器里看到的页面请求一些信息,然后浏览器告诉操作系统:“你帮我...

2018-06-18 21:49:34 391

原创 screen 命令和 shell 脚本基础

问题背景如果你要运行一个时间很长的 job 你会怎么办?这个问题可以转变为当一个任务运行时间非常长,你如何保证操作系统不自动中断它。答案取决与运行环境,如果是台式机 + windows 的桌面系统就注意一下人离开的时候锁屏,而不要注销用户或者关机即可;而当你使用 Mac 或者远程连接 Linux 的时候要如何处理?我做过一件很傻的事情就是即使要从宿舍走到图书馆也一直把屏幕开着,本想着校园里处处...

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

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

实验的前提条件本文会出现一些编程实验,有兴趣实践的读者需要首先确保自己的开发环境安装了Numpy 和 cv2 包,如果没有的话,可以通过:pip install numpypip install cv2来进行安装。语境中的Python数组数组是Python 语言原生支持的数据结构,直接用方括号声明即可,如:arr = [1,2,3,4,5]为了方便数组的创建,Python 支持递推表达式等优雅的写

2018-04-29 16:04:54 18340 1

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

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

2018-03-18 23:45:33 1025

原创 阿里密码题

除夕夜家里周围都是鞭炮声,朋友圈在看春晚,阿里技术公众号的新年密码题可谓是一股清流;在假期的懒惰氛围中,终于找到了一个动脑子的机会,让我十分想解开它。再加上程序员节(10月24日)的时候,类似的密码题目出现过一次,我挺感兴趣,却没有仔细研究。这次的题目乍一看是一个套路,于是我决定不能错过这次机会,好,破题开始 .第一个提示是三潭印月和郑成功,单独看不能得到什么结果;第二个提示很像列车时刻表,这时就会

2018-02-17 19:55:09 559

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

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

2017-12-26 14:51:56 6239

原创 技术债

总结一下今天排查出的一个bug Technology Debt如何发现bug最近屡次有用户报告在我的网络应用上登陆失败,我听到这个感觉很不可思议,因为我的代码逻辑就是直接转发给第三方验证机构,我作为一个中介应该是最不应该出错的地方。所以我的第一反应就是用户输入了错误的用户名和密码。跟一些用户交流以后,我劝他们再试一次,今天之前这种方法都成功了,于是虽然问题很奇怪,我也没觉得有太大问题。再加上问

2017-11-30 21:30:06 535

原创 Webster重现

-1. 计算周期的总损失时间 LLL=n⋅li+ARL = n \cdot l_i + ARnn 为一个周期内的相位数,lil_i 是相位ii 的启动损失时间,这里假设li=3l_i = 3, ARAR 是全红时间,这里AR=0AR = 0.对于小寨十字,有3个相位,所以有 L=9L = 9-2. 计算最大流量比之和YY流量比:实际流量 / 饱和流量Y=∑j=1nmax{yj1,yj2,y

2017-11-18 19:24:43 1487 1

原创 谈谈竞态条件

什么是竞态条件官方的定义是如果程序运行顺序的改变会影响最终结果,这就是一个竞态条件(race condition). 理解竞态条件首先要知道程序运行不一定是线性的。初学编程的时候都是从“面向过程编程“开始的,一条一条指令打下来,期待着他们会顺序执行。debug的使用也加深了这一认识。不过事实上如果两条紧挨着的指令没有依赖关系,jvm是有可能将他们的运行顺序倒转的。当然这是题外话,最显著的“不按顺序执

2017-11-05 09:38:10 7408

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

为什么要做这个东西项目简介同济的同学有一个分析卫星遥感图像的科研项目,他为图像的分析设计了一种新的算法,能够推荐原先的研究。他的算法是用Matlab实现的,涉及一些矩阵的运算。Matlab的计算在图片尺寸较小的时候运行比较顺利,但当图片超过100x100 pixel, Matlab就无法计算,因为它需要的数据都是单机内存存储的,无法适应更大的数据规模。为了解决这个问题,我利用HBase开发了一个存储

2017-10-23 23:10:37 542

原创 单机配置HBase的心得

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

2017-10-23 19:27:54 1799

原创 Mac如何查看JAVA_HOME

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

2017-10-21 09:20:38 7820 1

原创 杭州和上海的比较

问题背景智谷趋势上的一篇谈及杭州即将弯道超车上海,作者强调了杭州在新科技方面的成就远超上海,进而把中国杭州湾比喻成新的硅谷,说杭州将是这个新中心的核心城市。而我一直以来是一个“上海痴迷者“,就是觉得上海很伟大,上海永远是最好的,面对一个杭州的挑战,我有一些疑惑,就想验证一下杭州超越上海是不是真的会成功。研究方法最直观的反应经济状况的数据就是GDP, 我在这篇文章的第一版本先预测一下多少年以后杭州的G

2017-10-15 20:28:59 4086

原创 Persistent数据库开发

Persistent数据库不是某个数据库,而是一种性质。一个database 是 persistent的,iff 系统重启以后它原有的数据不会丢失。之前开发的Berkeley DB经常出现死锁现象,后来web application要部署到云端,需要稳定,我就放弃了数据的persistent, 把所有数据改成了内存内的存储(应用暂时的数据存储量还不大,所以内存存储也是合适的),牺牲一点persist

2017-09-21 22:39:54 587

原创 手动测试驱动编程

Manual Test-Driven ProgrammingTalk About TDD这个题目的断句应该是用手动的测试来驱动编程。我一直认为TDD就是要自动化测试驱动编程,写每一行代码前都要写好test case. 当然这在Java开发中很容易实现,因为有JUnit,也许自动化测试驱动编程的思想就是从JUnit来的吧。然而开发工作不可能完全用Java写。网络应用在前端的一些功能不可避免地会用到Ja

2017-09-16 10:02:28 464

原创 测试驱动编程的心得

Test-driven programming is the key to many dilemmas while failing to do that is the recipe for many disasters.这句话是我说的。最初接触TDD测试驱动编程的理念是这样的:在你写每一行新程序之前你都要写测试程序。先写一个fail掉的test case, 然后写足够让这个case通过的代码。再写新

2017-08-17 21:25:07 680

原创 实习日志

2017.8.18TGIF! 谈一下knowledge in the world 和knowledge in the head.The Design Of Everyday Things 一书本应该是讲设计的,但却花了很大的篇幅在讲knowledge in the world 和knowledge in the head的区别,阅读的时候很不解,但看完以后,自己着手设计起自己项目,就发现这两个概念非

2017-08-17 20:53:57 887 1

原创 排列组合

分糖果问题:x+y+z=10把y+z当成一个整体。支付宝红包,01和1都不同命令。航空公司 2C2M+N−2C2M=582C_{M+N}^2 - 2C_M^2 = 58宿舍红蓝对战,定义关系为同学u和同学v之间有至少一场比赛。记事本复制粘贴,最长文本长度:多次a+不断粘贴p2p通信,分两组研究1,m和m+1到n爸爸去哪儿,只有两种圆桌坐法,分别讨论坐法的varieties.括号嵌套,转换为几何

2017-08-16 21:49:14 361

原创 编程语言

判断2的幂答案:n > 0 ? (n & (n - 1)) == 0 : false;位运算技巧:n = n & (n - 1)的效果是消除n的最后一个1位。交换值不使用零时变量void swap(int &a, int &b) { a += b; b = a - b; a = a - b;}测试人员发现你负责的系统除了问题,需要修复,通过日志已经明确是某个模块的代码有问题

2017-08-12 11:08:04 348

原创 算法与数据结构

题1. 求n个数中的最大值和最小值,最少的比较次数是3n2\frac{3n}{2}.解析:最大值和最小值是有逻辑关系的,一个比最大值大的数不需要和最小值去比较;同样,一个比最小值小的数不需要跟最大值比较.将所有数两两分成一组,共n/2组,进行比较值大的归为新的一组tmax,值小的归为另一组tmin, 再分别和max和min比较,比较了2个n/2次.左右值数即“前序遍历树“,有如下特征: 1

2017-08-12 10:10:21 451

原创 操作系统与分布式

Unix System Call1. mkdir, create a new directory2. chmod, change a file's mode bits3. open, open a file for reading or writing4. close, close a filesetuid 置位,按照程序文件属主进行权限分配。在操作系统中,进程调度不需要硬件的支持。Linu

2017-08-09 22:14:02 603

原创 计算机组成原理

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

2017-08-09 21:30:08 432

原创 计算机网络知识点

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: 1. source IP 2. source port

2017-08-08 21:58:42 383

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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