• 技术,  算法

    一些面试算法中的Java基本操作运算

    很久没有真的写程序,一些基本的Utils的使用也淡忘了。这里总结一下: 数组 数组转化成List List转化为数组 排序数组 排序List 打印一维数组 打印多于一维数组 打印List 答应list里面含有array MAP Merge Print a map 其他 boolean的值只能是true,false,而不能是0,1. char是用单引号: char abc=’a’;

  • Uncategorized

    软件工程师的职业发展

    由jun-rao的职业生涯想起来”>由Jun Rao的职业生涯想起来 最近在看”Kafka The Definitive Guide”这本书。里面的作者之一是kafka最早的开发者。书中讲到了最早项目是如何开始的。提到Jay Kreps带领团队,其中一个是熟的作者(Neha),还提到了一个中国人的名字” Jun Rao”。 忍不住上网搜了一下这个人。下面截图他的工作经历: 89年清华本科毕业,然后去哥伦比亚大学读博士,一直到2000年。第一份在IBM的工作工作了10年,然后在加入LinkedIn4年,在LinkedIn的时候是Senior Staff Engineer, IBM的是Research Staff Member. 从LinkedIn离职以后作为cofounder加入Confluent,还是做Kafka相关的工作。 看到他的经历可能能感受到他在IBM 10年的不得志,加入LinkedIn就是一个转机吧。有时候就是需要一个契机,如果没有LinkedIn的机会,可能他也就像无数的在硅谷打工的软件工程是一样的职业历程。 有时候靠的是机遇,但是更多的还是要寻求自我的突破和探索新的领域的勇气吧。 和所有还想折腾的人共勉。

  • AWS,  技术

    如何在AWS中提供API服务

    这里讲如何通过利用AWS提供的基础服务对外提供Service。从域名解析到Load Balancer,再到Docker Container的端口映射。 下面是结构图。 以下是几点说明: Loader Balancer 定义了internal的DNS Name (比如说:internal-daco-sbx08-102899950.us-west-2.elb.amazonaws.com ) . Route 53的 Hosted Zone里面的records就是把外部域名解析到内部的DNS Load Balancer分三种. Application Load Balancer 是HTTP级别的,Network Load Balancer是TCP级别的。 ALB可以做端口映射,并根据http header(上面的例子是Host),把请求分发到Target Group. Target Group定义了外部的端口,然后管理外部端口到instance的端口。通常target group的端口和instance的端口是一样的(如果在task definition也就是docker container里面映射了外部端口),也可能不一样(如果没有映射). Target Group, Service是1:1映射。Target Group会提供health check定时check是不是健康。Task内部实现约定API,做实际check. ECS, ASG, Lauch Configuration协同工作,各司其职,提供服务和scaling,monitor等各种管理。 疑问 貌似没有配置load balancer的数量。难道这里从来不会是系统瓶颈? 关于Target Group的外部端口和docker container(task)的内部端口是一对一映射,还是随机映射,而让target group自己管理,不知道哪个是best practice。

  • 技术,  算法

    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的学习文档吧。其实去他们的网站也可以下载,只是需要订阅一下,我在这里共享一下,希望不会困扰到他们。 不知道有人需要翻译的么?留言让我知道。