面试数学题若干

回顾下面试中碰到的数学题

1、100!后缀上有多少个零?
热身题。看一百个数中的因子中2和5的数量,一个2和一个5构成一个结尾上的零。2比5多,所以看一百个书中有多少5的因子就是答案了。含因子5的有\(\frac{100}{5}\)个,另外有些数因子5的幂次(\(\frac{100}{25}\))。答案是20 + 4=24 。

2、假设生男生女概率相同,都是\(\frac{1}{2}\),一直两个小孩中有一个男孩,求另一个也是男孩的概率。
这题可以用贝叶斯做。更直观的思路是:男男、男女、女男概率相同,所以答案是\(\frac{1}{3}\)。

3、掷硬币,正反面出现的概率都是\(\frac{1}{2}\)。如果连续出现两次正面就终止。问终止时掷硬币次数的期望。
算期望的常规思路是假设次数,找次数的概率,概率对次数求和或者积分。但是这题很难算。思路是假设平均x次,找x自身的等式关系。
1) 第一次掷出反面,此时剩余次数期望为x
2)第一次掷出正面,有\(\frac{1}{2}\)概率还需1+x次,有\(\frac{1}{2}\)概率还需1次
因此\(x=\frac{1}{2}(1+x) + \frac{1}{4} 2 + \frac{1}{2} (1+x)\)
解出x=6次。

4、[0,1]上什么分布有最大方差?证明结论。
直观猜出结论是一个两点分布:\(\frac{1}{2}\)在0和1各自取值。
证明:
\(var(x) = E(x^2) – E(x)^2\),
因为\(x\in[0,1]\),所以\(x^x \leq x\),
所以\(var(x) = E(x^2) – E(x)^2 \leq E(x) – E(x)^2\)
后者极大值已经在上述结论中取到。

用天天P图制作color splash效果

下面这个特效见于《辛德勒名单》,同大幅黑白画面将观赏者注意力吸引到彩色的肥猫身上。这个特效通常可以用color splash这款app制作。但是color splash的问题是抠图太过麻烦,手指抠图的效果对目标边缘处理比较糟糕。今天尝试了用天天P图的抠图功能实现这个特效。

首先把图片导入color splash,获得全黑白版本。

结果就是这样,没任何难度,其实用别的app也可以:

然后打开天天P图,找到魔法抠图,导入原始彩色图片,选择任意模板:

魔法抠图使用了一些智能算法,对用户非常友好。抹两下就抠好了:

点击右箭头,到达这个界面。背景就是刚才选择的。在这里可以选择“自定义背景”,从相册里找到之前的黑白图片。
如果抠图时没有挪动过图片,那现在黄色肥猫应该正好覆盖在自己的黑白照片上。

保存图片,和color splash的效果相同,但是过程远远简单。忍不住马上再抠一张。


挽救糟糕的手机照相

之前用了小半年Nexus6,其拍照性能是灾难性的:打开相机要卡20秒到半分钟,照片各种噪点,照片灰暗。之后换了iPhone,相机是秒开,但是大多数时候照片仍是非常糟糕,所以手机P图是不可或缺的技能,发朋友圈之后修修图也是对朋友的尊重。

作为一个没啥审美观的人,简单研究了下各大P图软件(天天P图、美图秀秀、柚子相机,VSCO,Snapseed等等),我发现能基本掌握剪裁、调整亮度对比度色温,就处在朋友圈50%的照片水准之上了;如果还能抹掉一些坏点,基本可以处在前30%的位置。

前三项功能基本是个修图软件都有,后者目前只发现Snapseed最好用。下面以柚子相机和Snapseed为例,介绍以下怎么做出朋友圈里色泽金黄的早餐。

首先,原图长这样。它的问题在于没有阳光的感觉。没有阳光的早餐是不会被人承认的。

在柚子相机里打开照片,工具栏在最下面:

防止强迫症颈椎出问题,先旋转90度:

然后选工具栏第一项,调整亮度和对比度。只要细节都能看清,亮度和对比度大一点比较好:

然后选择工具栏第二项,增加色温。下面就看起来很阳光了,虽然我是放在不见天日的床头柜上拍的:  

这张照片背景比较干净,左边少有一些杂物,稍微剪裁就可以了:

修图成果:

为了强行演示Snapseed的污点抹除功能,我打算抹掉煎蛋上的几颗黑胡椒。打开Snapseed:

戳右下角画笔按钮,选修复: 

放大到目标胡椒的位置,用手抹匀蛋清和胡椒:

修复的结果:  
最终的成品:

移动开发实习体验

去年5月在某大公司实习Android开发,实习期持续了三个月,技术提高有限,但是了解了大公司规范开发的流程,算是最大的收获吧。

以前也在师兄的小公司实习过,Android和iOS开发一般是各两三个人,一个美工同时负责视觉定稿和素材切图,产品功能设计干脆是老板和客户一同负责。开发写完代码会自测,然后就交给老板和客户不停地玩,找出bug修bug。其实麻雀虽小,五脏俱全,上述过程基本包括了移动开发的所有角色。

大公司只不过在每个环节投入更多力度,保证每个步骤的可靠性。

首先老板肯定不必拿根铅笔画App的界面了,产品组和美术组会沟通确认功能和UI。偶尔也发生美术组和产品组意见不合,一般是以产品组为主导。

接下来就是产品组把所有需求细分成很多需求单,交给开发组。开发组员工的这一周比较轻松,除了日常的bug修复外就是思考这些需求,确定可行性,估算用时,分配每个人的任务。然而对本轮无法实现的需求驳回——和产品组复议。

然后就是开发组员工干活的时候。因为每个人负责独立的模块,而且代码有版本控制,所以不太怕一个人搞怀整个项目。不过偶尔还是会有人动到整个项目,导致整个项目不能build——通常就是实习生了。所以新员工会要求code review(CR),我实习的三个月大概提交了100次出头,也就是100次CR。

每完成一个需求就要申请提测。这个需求的产品组负责人和测试组负责人就要开动,确认该需求是正确完成并且没有bug的。如果有bug就会提出bug单。上述的需求单和bug单就构成了这个项目的管理系统。最直接的测试就是手动去玩,各种人类能做到的快速连击、断网、重启都可以尝试;另外有自动测试系统,本质上是测试程序疯狂在虚拟机中虐待App,找到可能的错误,把log交给程序员寻找可能的bug。

开发会在发布日前一周左右终止开发,避免引入新的bug。剩余一周是留给测试组和开发组共同消灭bug的。发布前几天开发组可能要偶尔熬个夜;发布后是开发组难得的清闲时光,一般可以早些回家。

当然开发开始到发布完成这段时间产品组也没闲着,开发组马上又会收到新的很多需求单。

静态博客与wordpress

昨天晚上折腾了个把小时,又把博客从pelican转移到了wordpress,托管在腾讯云上。

近两年静态博客比较流行,在计算机本地用markdown写文章,生成html页面,然后传到服务器上,就是静态博客,不需要服务器后端程序。唯一困难的是静态网页无法存储数据,这就不能支持评论功能,然而有disqus这样的服务,注册后可以用javascript载入评论区,所有评论都放在disqus的服务器上。国内应该也有了竞品。

我先前也在用这样的博客,比如octopress和pelican。优点还是挺多的:

  • 不需要后台程序。octopress和pelican会通过markdown文件生成html网页文件,直接放在网页服务器上。而网上有很多免费的静态托管空间,通常是免费的,例如github page。github page本意是给project一个静态的介绍页面,用来作为博客空间也算合适。
  • 安全性高。正因为没有后台程序,静态网页本身并没有漏洞,减少了网站被攻击的风险。
  • 逼格高。与众不同似乎是很重要的一点,特别是静态博客刚兴起的时候。

但是用了一段时间后,也发现了静态博客的痛点:

  • 只能在自己的电脑上写。静态博客的原始数据(markdown格式的博客文章)、转换程序都在自己的本地计算机上,所以必须只能用自己的电脑写。而用wordpress可以在任何有网络的地方写,在网吧写,在自己的笔记本、办公机、平板电脑上写,在手机上用wordpress的客户端写。毕竟写作本身才是博客的重点。
  • 如果硬要抬杠,其实也可以把博客的原始数据、转换程序放在服务器上,每次通过ssh登录去写。但是这又要求有比较高速的网络连接(否则敲一个字得等上一会儿才出现),至少需要一台vps而不仅仅是静态托管(可以直接用wordpress了),移动设备上的ssh体验通常比较差。
  • 评论数据不在自己的手中。如果更换域名或者调整URL,这些评论就不在能够找到自己正确的位置,这对个人博客来说可能是比较常见的。更不用说第三方服务条款变更(突然收费?)、宕机、倒闭等等风险。
  • 门槛高。这是高逼格的另一面。静态博客更适合程序员,在生成网页、推到到服务器这个过程可能出现各种各样的问题,非程序员或者IT从业者很难自己解决。

而wordpress的优点就是方便,配置一次就可以在任何地方任何设备上用,只要托管服务器不出问题就不用担心。而大规模的用户群也保证了各种插件的供应,大多数需求都可以满足。要专注写作本身,用简单的wordpress还是很不错的选项。