说实话这个标题可能比较欠扁。不过在这种辞旧迎新的气氛里还是觉得应该不吐不快吧。
从入职新公司到现在为止一年过去了,新公司的工作能发挥自己主观能动性的任务非常之少,除了年初在公司没有任何可用的垂直搜索方案的时候就自告奋勇地给自己部门搭了一套
es 集群,到年后将这个方案接入到公司公用的 binlog 信息流之中。再到后来为了接入方便开发了简单的 SQL
解析,以及工作时间处理各种集群查询、删除之类的操作导致的 OOM/GC
之类的问题啊什么的(感觉自己已经负责了不少运维的工作233)。其余的工作大多还是搬砖居多。
称之为搬砖一点都不为过吧,就是写写 CRUD ,写写 api ,然后和前端和其它系统和外部门的人来各种联调。
大公司么,总是会花多余的钱让稍微高级一些的人去干低级的事情。反正有钱。
话虽然是这么说,写写简单的 api ,过程也不是那么一帆风顺,
部门的一个新项目使用了kafka
0.9来进行开发,不得不说目前公司的kafka版本真是够混乱,从0.8~0.10三个版本都存在,而我们部门在选择版本的时候则更加不慎重,追新追时髦,0.9刚出就直接开始使用了。还依赖一个不成熟的spring-kafka库来做开发,开发到快要上线遇到了消费hang住的情况,没有去深查源码,选择了去第三方库的方式。。。用官方的原生sdk来规避这个问题。说来运气不错,这个问题竟然被成功地规避掉了(233。
然后就遇到了紧接着的重复消费的问题,同事遇到了问题首先的疑惑是,为什么我使用了别人的demo代码,但在我的场景里才出现了重复消费呢?
嗯,好吧,我们来查一查。
一个kafka 0.9比较典型的消费一般是长这样的
main:
for(int
前面写过一篇中间件与责任链模式,最近被同事揪出来打了脸,感觉有必要再做一次学习和分析,下面就是新的学习成果~
中间件
让我们从例子开始,我们发现网站的评论系统中有人恶意进行xss攻击,因此想要对用户的请求做简单的xss过滤,简单地来做的话可以对所有用户提交内容中的尖括号
进行过滤。那么可以完成形如下面的函数:
// input = `script>`
func XSSClean(input string) {
input = strings.Replace(a, `<`, `[filtered]`, -1)
input = strings.Replace(a, `>`, `[filtered]`, -1)
}
把这个函数封装进我们自己的utils包中,在业务层需要进行xss过滤的时候只要使用XSSClean函数对输入字符串进行处理即可。
这些问题来自于github项目:
> https://github.com/monklof/Back-End-Developer-Interview-Questions
我整理了一些自己的答案,之后要是有想法了大概会陆陆续续更新吧(大概
说明
这篇文章翻译自一位外国友人的关于面试后端程序员的文章,我比较喜爱这篇文章。一是因为它极大的拓宽了我的视角,另一方面是其中的一些问题非常具有启发性。不仅对于面试者,对于面试官来说也是个不错的参考。于是迫不及待的翻译了一下,给各位看官做个参考。
这篇文章中,许多问题我并没有完全理解,所以翻译可能存在不准确的地方。如果有读者发现有一些翻译有误或者不好的地方,请不吝赐教。
原文参见 @arialdomartini [https://github.com/arialdomartini]的: Back-End Developer
Interview
最近公司迁移机房,不知道为何用google
authenticator来做验证。这下直接导致我们在这个公司有三种形式的token。。。实体token、宁盾和ga。真够麻烦。
不过迁移机房之后至少我们可以不用登陆windows
server来做跳板,所有过程在终端完成。那么就可以直接用expect脚本来实现自动化了。问题就剩下怎么生成这个随时会变的token。
去github上找了找,结果发现离线生成ga的token竟然是可行的。这点和我当初想的不太一样。之前道听途说,token在服务端和客户端都用了非常牛逼的加密算法,所以才导致其破解不了。但实际上看来加密算法竟然是可以直接公开的。。对于这种算法而言,必须的条件就只有一个,就是分发给你的独一无二的key。用这个key在服务端和client端每30s进行一次计算,然后就可以得到一个六位数字,关心具体算法的可以看这里:
> https://github.com/cch123/googleAuthenticator
两边进行匹配即可。而在服务端识别key和用户身份则是通过当初把这个key分发到哪一个账户下了,也就是把key发给了哪一