算法

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 。 用 N - x 替换黑板上的数字 N 。 如果玩家无法执行这些操作,就会输掉游戏。

只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。

示例 1:

输入:2

输出:true

解释:爱丽丝选择 1,鲍勃无法进行操作。

示例 2:

输入:3

输出:false

解释:爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作。

  1. 1 <= N <= 1000
  1. /**
  2. * @param {number} N
  3. * @return {boolean}
  4. */
  5. var divisorGame = function(N) {
  6. return N % 2 === 0 ? true : false
  7. };

这是写的最简单的一个算法了。最开始看到的是游戏,实际分析之后,两个人在最佳状态参与游戏,只有两个人每次都减1,所以从最开始拿到的数字就可以知道,谁输谁赢,也就是判断是否是奇数偶数的问题。如果爱丽丝拿到的是偶数,经过每次选择爱丽丝拿到的始终是偶数,最后胜利,如果最开始是奇数,则一直是奇数,最后输掉游戏。所以爱丽丝最开始拿到的数字是偶数的时候会赢得比赛。

Review

本周仔细读了Front-end JavaScript Interviews in 2018–19 前端2018到19面试指南。
前端变化很快,新的的标准层出不穷基本上每年都在更新和变化,而我们大部分的面试还是老一套问一些过时的问题。这篇文章分几个部分针对2018-19前端面试做了一些指导,分为JavaScript基础问题、JavaScript前端应用设计问题、前端基本问题和原理。前端涉及的东西很多,而在面试的时候我们应该筛选那些既明白原理又能关注新形势的问题,而不是只关注在一些技巧死的知识点,更多的应该提一些发散性的题目和面试者进行讨论,在相互沟通交流中来确定这是不是我们要找的合适人选,也让面试者评判我们是不是他寻找的合适公司,这是一个双向选择。

文章中还有一段视频,这段视频指出npm是JavaScript的未来,“网站app 97%的代码模块都来自npm”,确实是的我们现在使用的框架,核心的技术点全部都是优秀的开源项目,通过npm引入,遇到什么问题,也是在网上寻找有没有合适的JavaScript库来解决。从大量的资源中,找到合适的库来解决现有问题,也是一项技能也需要在面试中作为考察项。

Tips

这周碰到的问题就是HTML转PDF的问题,在这里总结整理了解决方案。
HTML转PDF

Share

人生总是有迷茫的时候。当自己觉得迷茫没有方向时,就向比自己厉害的人看齐,比如说技术方向上的耗子哥还有安姐,他们都是我佩服的真正的技术人,热爱技术热爱学习,在自己的领域能做到尖上的人。虽然不能成为像他们那样厉害,但可以为自己定比当前的自己更高的目标,并努力达到,就算达不到肯定也比刚开始的时候好很多。

最近在看耗子哥的专栏,可谓收获多多。其中一个就是对程序员来说什么最重要,“对程序员来说,编程能力很重要,但是技术视野,技术洞察力,以及我们如何用技术解决问题的能力更为重要”。不要一味的埋头工作,写了多少代码做了多少项目,业务做多了就成了代码搬运工,真正的码农了,要多抬头看方向和牛人交流,多思考多总结多学习,培养自己的技术视野和洞察力以及解决问题的能力。

还有就是以前有一个错误的认知,一份工作到了一定的瓶颈无法提高自己的能力的时候,就想要换一份工作希望从下一份工作中获得,其实这是不对的,换工作不是解决问题的办法,到下一份工作还会遇到同样的问题,看了专栏才明白,“不要完全把自己的学习寄希望于找一份工作,才会学得好。开源社区,网络资源都可以学习”,找工作其实并不是找一份技术的工作,而是找与自己契合的团队,靠谱的团队,这才是对学习和成长更有帮助的事情。以前也害怕面试,但不多面试怎么能找到自己满意的工作与自己契合的团队呢。

努力学习让自己有更多选择。