技术

  • 技术,  算法

    Two Sum算法的小trick(Leetcode的premium的解答没有讲到的)

    最开始其实想说一下Leedcode提供的实现的代码质量其实真的一般,如果有人面试的时候用实例代码的风格,我估计算法写的再好也没太大用。最简单的变量命名。尽然有这样的代码: Map<Integer, Integer> map = new HashMap<>(); 每定义一个变量都要花时间至少稍微想一个变量命名,这是一个最基本的习惯。写出用map作为变量名的人绝对不是有经验的好工程师应该做的事情。 好了,言归正传。 Two Sum可以算是算法题里面最简单的之一了。下面是题目和LeetCode Premium给出的一个SolutionO(N) Solution. 题目:Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.You may assume that each input would have exactly one solution, and you may not use the same element twice.You can return the answer in any order. 下面是采用Two Pass的 O(N)时间复杂度的解答: To improve our runtime complexity, we need a more efficient way to check if the complement exists in the array. If the complement exists, we need to get its index. What is the best way to maintain a mapping of each element in the array…

  • AWS,  技术

    AWS 花费知多少

    很久没有关注AWS的花费了,一个不相干的会忽然让我想起来可以去看一下。 下面是公司一个单独服务的一个月的花费: DynamoDB在项目中就是存储一些简单的audit,花费却是最多的一项。写花了7k多,而读只是185.说明存了却没用😂。 EC2提供基本服务,用得多倒是也正常。ElastiCache其实有点浪费了,很多东西其实可以用其他方式存取,DynamoDB应该可以满足大部分的需求。DynmoadDB的存储挺贵的,应该可以删掉90%。RDS数据库应该也算是相对合理。 EC2 Transfer是跨region的花费,其实应该可以避免的。 所有服务的参考:

  • Linux

    如何在Linux访问Mac文件系统

    如果你在家里自己搭建了一个Linux服务器,有时候需要把本地Mac笔记本里面的文件映射到远程linux服务器。比如说你需要: 在远程Linux运行docker,docker有时候需要把本地的文件目录mount到container里面。但是这个时候docker engine的本地其实是linux服务器。这个时候就需要两次link。把mac的文件目录mount到远程linux,然后再通过docker把linux的host目录mount到container。 单纯的文件拷贝。这个比scp要方便。 做法其实很简单,就是修改’etc/fstab’,加上下面这行: 192.168.103.168:/System/Volumes/Data/Users/abc /mnt/abcMap nfs defaults 0 0 这种做法默认是没有写的权限,如果需要写的权限,不能直接用chmod在linux下改,而是需要在mac电脑上用chmod把其他用户组也授予写的权限。 注意当添加子目录的时候,mac默认是其他用户组还是没有权限,这时候每添加一个新的目录,就需要再修改一次权限。

  • 技术,  胡侃

    不写code的技术经理不是好经理😄

    来美国6年了,基本上没有写过什么code。大多数时间就是做一些high level的 design,项目的协调,帮助解决客户问题和各种杂事。真的没有时间专心看技术,写code。 最近难得有机会,在没有打扰的情况下自己学一些东西,写一些东西,纯技术。还真的有一种欲罢不能的感觉。😂 挺好的,忽然觉得以前的那些时间是不是白白浪费了。。 作为技术经理,如果对于技术本身没有第一手的信息,特别是现在技术发展这么快的情况下,很多情况下,做出的决定,提出的方向可能就会落伍。如果组里面有很强的技术人员当tech lead还好一些,如果组里面都是年轻人,那这样的没有第一手经验的经理其实很难带出一个有效率的团队。 给自己加个油!

  • 技术,  算法

    理想和现实的差距 – Redis的近似LRU

    最近看一些算法题,各种时间复杂度,空间复杂度充斥脑海。O(N), O(N^2), O(NLogN)。这里拿LRU(Least Recently Used)算法来举一个例子算法和实际的差别。 这个是Leetcode里面的算法: https://leetcode.com/problems/lru-cache/. 没有兴趣的人其实也不用看,基本上就是设计一个LRU算法,保证读取和插入的时间复杂度都是O(N). 代码基本上也就100行左右,貌似很简单。但是如果看Redis的文档我们会发现这段话: https://redis.io/topics/lru-cache Redis LRU algorithm is not an exact implementation. This means that Redis is not able to pick the best candidate for eviction, that is, the access that was accessed the most in the past. Instead it will try to run an approximation of the LRU algorithm, by sampling a small number of keys, and evicting the one that is the best (with the oldest access time) among the sampled keys. 既然算法这么简单为什么Redis的默认实现不去做严格的LRU呢?其实原因很简单,为了节省空间。在传统的时间和空间复杂度里面,所有的非指数级的增长都被归纳成一个结果。比如说O(N) 和 O(2n),或者更夸张的O(100N)或者更多。这在实际中能是一样的?使用double的空间,花费double的时间,再怎么说也不一样的。

  • 技术,  胡侃

    关于技术的学习。

    最近在搭建这个网站的过程中,遇到了各种各样的问题。查阅了很多的网站。由于都是随机搜索,质量层次不齐。经常follow步骤以后还是没办法解决问题,折腾了很多时间。 忽然觉得如果有一个技术网站,如果能在提供技术文章的基础上,提供在线的技术支持,帮助解决问题,可以采用订阅是的服务,我觉得我会付费的。 是这看看能不能做起来。先共享一个刚下载的Baeldung的Spring的学习文档吧。其实去他们的网站也可以下载,只是需要订阅一下,我在这里共享一下,希望不会困扰到他们。 不知道有人需要翻译的么?留言让我知道。