面试

如何写一篇技术文章,谈谈我的看法

拜拜、爱过 提交于 2021-01-14 07:42:13
前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star : https://github.com/ZhongFuCheng3y/3y 我一直推崇学技术可以写 技术博客 去沉淀自己的知识,因为知识点实在是太多太多了,通过自己的博客可以帮助自己快速回顾自己学过的东西。 我最开始的时候也是只记笔记,认为自己能看得懂就好。但如果想验证自己是不是懂了,可以写成技术博客。在写技术博客的过程中肯定会发现:“这个知识点,我好像还有些没搞懂”。 从梳理/编写的过程,自己也会成长不少 有不少的小伙伴曾经问过我: “3y你是怎么记笔记的阿?我一边看视频一边记笔记,顾头不顾腚的” “你写的博客都是怎么思考的阿?我不会写博客” 不会写技术博客/笔记 下面来谈谈我一些观点(个人/主观),每个人都有自己的方法论,我的观点不适用于所有人。 开局一张图,内容全靠编: 内容全靠编! 一、如何写一篇技术博客 首先,我认为要把 自己当做是一个分享者 ,而 读者是一个小白 。然后模拟这个场景:如果你要把你学习到的技术分享给小白,你需要怎么去做。 按照我的思路,我可能会这样做: 首先,这项技术是什么你得先告诉他。 接着,为什么要学习这项技术,学习了这项技术有什么好处。有没有以前的技术跟这个较为相似的,为什么我不用以前的,而要学新的。( 这一步非常非常重要 ) 然后,这项技术的核心用法是什么

我失败的程序员生涯

强颜欢笑 提交于 2021-01-14 07:39:08
我,一个普普通通的人。普通本科毕业,来到北京成为了一个普通的程序员。 2013年,我本科毕业,然后就踏上了北漂的征程。 来之前想的很清楚。北京技术发达先进。我可以在这里工作三四年,学习成长自己的技术,然后回二三线城市,找家公司做个小主管啥的,应该是可以的。 但是呢,现在马上都要五年了,考虑到老家的就业机会,工资福利待遇,也还是一直没有勇气回去。 时间快的有点让人感觉喘不过气来,回首自己这几年的工作经历,那真可谓是失败啊。 说起失败,我都不知道从何说起,那就从刚毕业找工作聊起吧。 一 刚毕业来北京,住宿条件差就不用说了。每天是拿着简历到处跑。现在想想,那还真是年轻不怕累,现在让我一天面俩公司,我都感觉特别累。 还记得当时有一天面试俩公司。上午是面试久其软件,在北京的南四、五环上了吧。下午是面试用友软件,在中关村软件园。 由于跟久其的面试官聊得有些久了,一结束面试,就向地铁站飞奔。因为当时觉着,用友软件还是大公司,名牌公司,尽量不要错过了机会。 出了中关村软件园附近的地铁站,按照我没钱的习惯,能跑步就别坐车,那时也还没有共享单车。但一看时间又相当紧迫,于是就打了个摩的。 到现在,我都不知道中关村软件园有几个,怎么划分的。当时摩的师傅把放到软件园就走了,我甚至不确定那个软件园是不是用友所在的软件园。 无奈之下只好拿出我的智能手机不停的,一边导航一边走。 还记得那个手机型号是ME525

来看看十亿推荐关系优化是怎么做到的?

若如初见. 提交于 2021-01-14 07:15:27
前言 最近,一朋友整天因为CPU 99%搞得茶饭不思,夜不能寐,找到我”诉苦“。听完成,心中一阵窃喜:是时候展现真正的实力了(其实是练手的机会来了)。半推半就应承了下来。 01 分析 问题 几分钟了解下来,大概情况如下:会员可以推荐其他用户注册,会员有一个属性--活跃度,用户观看视频,签到等等行为时,这个属性会动态变化,其中有个需求是统计所有下级活跃度。会员模型如下,模型比较简单,使用使用sqlserver 2016。   了解需求后,再来看看占cpu高的查询。其中占cpu 时间最多的就是下面这条sql,查询某个用户所有下级的活跃度之和。这条语句使用递归查询,那是比较耗时的,另外如果层级太多还有如下错误:语句被终止。完成执行语句前已用完最大递归 100。 WITH T AS( SELECt DataID, avtivenewss FROM User WHERE DataID = 4167 UNION ALL SELECT u.DataID, u.avtivenewss FROM User U INNER JOIN T ON U.parentUserid=T.DataID ) SELECT sum(avtivenewss) FROM T    当前用户1W+。 02 失败的尝试:前缀法 几乎没思考,就想到了一个方法:前缀法。一个用户的所有后代使用同一个前缀。增加一个字段 paths

Java并发之ThreadLocal

半世苍凉 提交于 2021-01-14 06:32:51
作者: @ adamhand zybuluo.com/adamhand/note/1370920 ThreadLocal是什么 首先说明,ThreadLocal与线程同步无关。ThreadLocal虽然提供了一种解决多线程环境下成员变量的问题,但是它并不是解决多线程共享变量的问题。 ThreadLocal类提供了一种线程局部变量(ThreadLocal),即每一个线程都会保存一份变量副本,每个线程都可以独立地修改自己的变量副本,而不会影响到其他线程,是一种线程隔离的思想。 实现原理 ThreadLocal提供四个方法: public T get ( ) { } public void set ( T value ) { } public void remove ( ) { } protected T initialValue ( ) { } get()方法是用来获取ThreadLocal在当前线程中保存的变量副本,set()用来设置当前线程中变量的副本,remove()用来移除当前线程中变量的副本,initialValue()是一个protected方法,一般是用来在使用时进行重写的,它是一个延迟加载方法。这四种方法都是基于ThreadLocalMap的。 ThreadLocalMap ThreadLocal内部有一个静态内部类ThreadLocalMap

软件测试工程师如何从功能测试转成自动化测试?

给你一囗甜甜゛ 提交于 2021-01-14 06:21:40
老徐接触了太多测试同行,由于多数同行之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的同行。 老徐从事软件自动化测试已经近十年,接触过底层服务端、API 、Web、APP、H5 等等,对自动化算是比较了解。在此分享一下个人经验。 想做自动化,首先得了解一下自动化测试的一些常见问题。 也是老徐面试时,必问的一些问题( 这么简单的面试问题,你却答的一塌糊涂 ),如果对自动化完全不了解,每天在那嚷嚷要做自动化,都是空喊。 自动化测试一些问题 1. 什么是自动化测试? 自动化测试,顾名思义,自动完成测试工作。 通过一些自动化测试工具或自己造轮子实现模拟之前人工点点/写写的工作并验证其结果完成整个测试过程,这样的测试过程,便是自动化测试。 自动化测试,看上去很美,感觉好像是第一次工业革命,它开创了以机器代替手工劳动的时代,实则不然。 因为每一个自动化测试的case都是从手工测试做起的, 如果没有手工测试的基础,是没法进行自动化测试。 2. 为什么要进行自动化测试 为什么进行自动化测试,答案要从自动测试的收益和人肉测试的成本说起: 1)自动化测试节约成本(根据项目) 毕竟自动化测试确实解放了一批人力(人力成本才是IT公司最大的成本),可以让机器没日没夜的执行一些重复劳动. 2)有些测试项目手工很难实现(手工成本较高) 比如12306的压力测试、负载测试

SpringBoot 三招组合拳,手把手教你打出优雅的后端接口

柔情痞子 提交于 2021-01-14 05:51:33
点击上方蓝色“ 方志朋 ”,选择“设为星标” 回复“ 666 ”获取独家整理的学习资料! 作者:RudeCrab 链接:suo.im/5YMt2A 一、前言 一个后端接口大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。如何构建这几个部分每个公司要求都不同,没有什么“一定是最好的”标准,但一个优秀的后端接口和一个糟糕的后端接口对比起来差异还是蛮大的,其中最重要的关键点就是看 是否规范 ! 本文就一步一步演示如何构建起一个优秀的后端接口体系,体系构建好了自然就有了规范,同时再构建新的后端接口也会十分轻松。 在文章末尾贴上了项目演示的 Github 地址,clone 下来即可运行。并且我将每一次的优化记录都分别做了代码提交,你可以清晰的看到项目的改进过程! 二、所需依赖包 这里用的是 SpringBoot 配置项目,本文讲解的重点是后端接口,所以只需要导入一个 spring-boot-starter-web 包就可以了: <!--web依赖包,web应用必备--> < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId >

程序员编程时戴耳机是在听什么?

荒凉一梦 提交于 2021-01-14 05:40:12
来源 | 公众号程序人生 作者 | 五五 封面 | 恋爱循环-live版 知乎上有个提问: 程序员上班时戴耳机是在听什么? 高赞回答是: 戴上耳机是告诉其他人不要打扰我,实际上并没有在放音乐。 程序员在工作时间里除了其他人过来打扰,他的社交软件是这样的: [置顶]业务群: @你 … 产品-刘同学: 这块需求我想改成… 测试-陈大姐: 今天要上线了,你赶紧改下最后两个bug吧 测试-李妹: 你昨天提测的项目有问题啊,先帮忙查下吧,主要流程… 前端-程小哥: 这接口你得给我传两个值 产品-王同学: 帮忙看下线上问题吧,用户很着急 技术群: @ all,今天下午四点有技术分享会,请大家准时参加 … 消息不断跳出,一个个小红点点不断催促你打开。还有各种岗位的人找你讨论问题,你不得不停下手上的工作,一次次去回应这些紧急事情。等回答完想继续刚才的工作,却忘记刚才写到哪里,又得重新捋思路。 有数据显示:人被打扰后重拾起原来的思路平均需要 3 分钟,由于几分钟就被打断一次,每天大约有 2.5 小时被浪费掉的。 到了下班时候,你才惊觉,今天要做的需求连一行代码还没开始写呢。 顺理成章的你开始加班。 01 为什么总觉得自己的工作效率很低? 在《深度工作》中作者提出一个公式:高质量工作产出=时间×专注度。 高质量工作产出需要人进入深度工作状态,深度工作指的是在无干扰的状态下专注进行职业活动

第八周读书笔记 ——编程之美

♀尐吖头ヾ 提交于 2021-01-14 00:38:07
本周在陈灿同学的介绍下,我也开始看编程之美这本书了。看的不多,仍然停留在第一章。虽然这本书全书只有四章,但是它并不是一本“洛阳纸贵”的薄书。恰恰相反,在我不多的阅读页数里,蕴含的知识和感悟可不算少。 书的序言从一个很有意思的例子开始,这也是我这篇读后感想重点谈的内容。这个例子说的是一场微软的面试,被面试的女生拿到了这样一个题目:“请写出一个程序,使得CPU的占有率维持成一条50%的直线”。面对这样一个“奇葩”题目,女生当然完全无从下手,哪怕面试官(邹欣老师)把笔记本借给她,让她上网查资料,她也没有办法在45分钟之内做出这道也许她从来没有见过的题目。待到面试结束,女生非常沮丧,而面试官也同样感到遗憾,因为就因为这一个问题,他也错失了继续了解这位面试者其他方面的机会。 毫无疑问地说,站在中国学生的角度上看,这样一道怪题,可以说是谁碰上谁倒霉。不仅仅是因为课堂里不讲这种类型的题目,更是因为自己从来没有从这样的角度去重新审视“编程”。如果没有头绪,那么很可能这一次面试就这么完结了。但是,如果我们暂时先抛开面试的功利性质,仅仅来衡量这道题目本身来看,其实它是一道非常有趣的编程问题。其有趣之处,在于其不仅仅是考察做题者的编码能力,更是在考察作者是否有对编程更深层次的理解。编程,绝不仅限于课本上的题目,或是某一个具体的算法,而是与整个计算机密切相关的。对计算机系统理解的层次不同

Java容器(List、Set、Map)知识点快速复习手册(上)

北战南征 提交于 2021-01-13 23:03:12
前言 本文快速回顾了Java中容器的知识点,用作面试复习,事半功倍。 上篇:主要为容器概览,容器中用到的设计模式,List源码 中篇:Map源码 下篇:Set源码,容器总结 其它知识点复习手册 Java基础知识点面试手册(上) Java基础知识点面试手册(下) 概览 容器主要包括 Collection 和 Map 两种,Collection 又包含了 List、Set 以及 Queue。 Collection 数组和集合的区别: 长度 数组的长度固定 集合的长度可变 内容 数组存储的是同一种类型的元素 集合可以存储不同类型的元素(但是一般我们不这样干..) 元素的数据类型 数组可以存储基本数据类型,也可以存储引用类型 集合只能存储引用类型(若存储的是简单的int,它会自动装箱成Integer) 1. Set(元素不可重复) HashSet:基于HashMap实现,支持快速查找,但不支持有序性操作。 TreeSet:基于红黑树实现,支持有序性操作,但是查找效率不如 HashSet,HashSet 查找时间复杂度为 O(1),TreeSet 则为 O(logN); LinkedHashSet:具有 HashSet 的查找效率,且内部使用链表维护元素的插入顺序。 2. List(有序(存储顺序和取出顺序一致),可重复) ArrayList:基于动态数组实现,支持随机访问; Vector

TCP的三次握手与四次挥手

这一生的挚爱 提交于 2021-01-13 23:01:45
TCP报文段的首部格式 **序列号seq:**占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 **确认号ack:**占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。 **确认ACK:**占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。 **同步SYN:**连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。 **终止FIN:**用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接 **PS:**ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。 字段 含义 URG 紧急指针是否有效。为1