Arduino as Socks5 Proxy Server

Still WIP because the buffer manipulation is so f**king problematic. Hardware: Arduino Uno + W5100 Ethernet Module Tested working through curl.

 

记两次面试

第一次是一家香港公司,跟现在公司的领域很相近。笔试是3个小时的,不过里面题目难度中性,都是改编题,印象中其中一题是霍夫曼编码之类的有点好玩。反正一个半小时做完了。 后来电话面试就坑B了,一接电话是浓厚的印度英语!结果就是对方的每一个问题我都要跟他确认一下,两边都不爽。电话面试持续了45分钟左右,上来先问项目经历,然后主要问C++11特性: move, forward, 智能指针,还问了些模板什么的。另外在扯CPU的cache warm。这个电面妥妥的跪了,一方面C++11的某些细节我没有掌握,但我觉得最大的问题就是语言不通,这个怪我听力不好,但是咖喱味的英语真乃从未有过的体验,下次不敢了。 ====== 第二次突然一猎头在领英上找到我说有杭州的机会,那就试试。结果是X方量化。 之前一次听同事说X方面试难,如何如何厉害,也想见识一下。这里客观陈述一下 在线笔试。题目是牛客网的通题,都是套路题,最后两道编程对于不常刷题的人来说时间有一点赶,不过难度就是LeetCode Easy的难度; 面试第一轮。问各种C++的问题,但是基本是STL容器内部运作的机制,并且当我讲到C++11特性的时候(比如move)对方并没有细问,故猜测該公司用C++11的地方可能略有局限。随后一道公司自己出的算法题,考数据结构设计的。在面试官给出某种场景的前提下,我给出了个性能更好的解决方案,不过面试官也换了场景让我的方案往他预想的地方靠,最终终于实现了一统~面试官对时间复杂度的计算有要求。 面试第二轮。也是各种C++问题开场,难度一般。遂给了一道算法题,当时懵了竟然想到用动态规划,但是后来经提示有O(N)方法于是用了贪心法,然后面试官又小改了一下测试我是不是真的理解了。另外就是讲到C++模板还有我的项目经历,我提到之前使用过CRTP做东西,于是让我写了下CRTP长什么样。 面试第三轮。一个中年大叔,一进门就接了一分钟电话,然后让我做自我介绍。当时心想肯定是个领导于是开始忽悠简历,然后做了个滑动窗口最大值的原题就结束了。 面试第四轮。后来了解到是CTO,反正被带去吃了个午饭瞎聊然后说问个小问题。蓄水池抽样,不过可惜我当时拉肚子加上对概率不敏感,瞎凑对了抽样概率但是一直卡壳没法证明它是对的,估计让大佬失望了哈哈。 然后是HR面,不细说了。 最终结局是Offer隔了两天收到了,但是我与猎头都不是很满意。个人觉得面试上没有安排系统设计的问题可能是对方的一个疏忽点,也可能觉得我就是个junior而已怕把我伤了,其实可以试探一下的。 目前的教训是面试之前不能乱吃东西,第三轮到第四轮的时候肠胃就开始闹腾。第二就是还是要熟悉一下基本的概率套路,自己在这方面是弱点。第三就是下次面试之前要打听一下薪资待遇,这次还特地周末看了看书,现在想想瞎紧张个啥….

面向对象软件设计的S.O.L.I.D原则

具体示例请看原文:S.O.L.I.D: The First 5 Principles of Object Oriented Design S.O.L.I.D 代表着: S – Single-responsiblity principle 单一责任原则 一个类应有且仅有一个理由去变更,即一个类只应用于一个工作。 O – Open-closed principle 开闭原则 对象或实体只应该开放扩展,而不该开放修改。 我的理解是应该避免越俎代庖的事情发生,不应该在调用某类实体的地方去关心某个对象该方法的具体实现。例如有两个Shape类的继承类Circle及Square,在对各自计算面积的时候,具体计算面积的方法不是调用者需要关心的,否则每增加一种继承类都要去修改调用方法。 L – Liskov substitution principle 李斯柯夫替代原则 令q(x)是关于类型T的对象x的可证明属性。那么对于T的子类型S的对象y,q(y)也应该是可证明的。 这个是官话,简单来说就是每个子类都应该可替代他们的父类,所谓“子承父业”。 I – Interface segregation principle 接口分离原则 永远不应该强迫用户实现它不使用的接口,或不应该强迫用户依赖于他们不使用的方法。 比如不应该让一个二维平面的类去实现一个计算体积的方法。 D – Dependency Inversion Principle 依赖倒置原则 实体必须依赖于抽象,而不是具象。高级别的模块不能依赖于低级别模块,而是需要依赖于某种抽象。 比如一个Gateway类需要通过某种网络IO接收数据,它应该依赖于一种IO接口的抽象而不是具体的某种IO(比如UDP IO),否则当你想换一种IO做同样的事情时你就会很头疼。

C++ Template: Handle mutual (circular) dependencies

Sometimes we have two classes that need to call each other’s somewhat function, for example

but as you can see A depends on B’s type to initialize and vise versa. If we declare the types as above we’ll not get a chance to create any instance. There are at least two ways to resolve
Continue reading C++ Template: Handle mutual (circular) dependencies

Some of the best answers to LeetCode questions

Here I gathered some of (what I thought are) best answers to LeetCode questions: https://leetcode.com/problems/wiggle-subsequence/discuss/84887/C++-0ms-O(N)-dynamic-programming-solution an O(n) solution https://leetcode.com/problems/trapping-rain-water/description/ an O(n) solution of a similar (but harder) question, found in the book <算法竞赛入门经典(第二版) pp249例8-18 basic idea is to find a maximal height which can reserve the water for each position i, if the max height
Continue reading Some of the best answers to LeetCode questions

LeetCode 402. Remove K Digits

https://leetcode.com/problems/remove-k-digits/description/ 如果直接用DFS做的话轻轻松松就会stack overflow。 这道题可以用贪心法,题目换个思路说就是尽可能保证得到的数字是递增的。在拿到一个新数字时,尽可能(只要还能删)把该数字之前的比它大的数字移掉。 贪心法之所以能用是因为我们去尽量保证了a1<a2< …< x< y,如果这些个数字里要选一个删掉的话,肯定是删掉y带来的结果最好。