面试

时间对于程序员的价值,以及如何高效地利用时间,同时划分下勤奋度的等级

感情迁移 提交于 2021-02-02 03:58:06
本文不讲“时间就是生命”之类的套话,而是会量化地直观地描述时间对程序员的价值。在高效利用时间的方法方面,也不会讲“合理制定计划,然后再执行”之类的对每类人都适用的方法,而会专门讲述针对程序员的时间管理方案。 1 对初级Java开发而言,学习能带来的其实收益不多,但必须得学 一般而言,本科有1年经验,可以算得上初级开发,再做个2到3年,一般就能达到高级开发的工作年限要求,但是! 最终完成升级,不能仅凭工作经验的积累,还得通过升级认证(即成功通过高级开发的Java面试)。本人一直在做技术面试官,也经常帮助初级程序员升级通过面试。 根据社会上普遍的实践经验,初级程序员估计最少需要150个小时的学习积累,即可掌握高级开发的面试技巧,(Java Core估计30个小时,数据库估计30个小时,Java Web估计30个小时,优化类估计30个小时,准备简历总结面试经验估计30个小时),这况且还是最低标准,如果总结再充分些,各方面条件也再好些,估计累计准备个200小时,就能直接进到大公司了。这些我倒不是拍脑袋想出来了,根据我的实践经验,我整理出一本书, java web轻量级开发面试教程 ,不少 技术面试官和技术讲师都能认可这个观点。 我找了份工资统计数值,目前(2018年5月),1年java开发(初级水平)工资大概是10k,而完成升级后的高级开发,工资在13到15k左右。 也就是说,按平均水准

Java常用的八种排序算法与代码实现

独自空忆成欢 提交于 2021-02-01 23:52:47
排序问题一直是程序员工作与面试的重点,今天特意整理研究下与大家共勉!这里列出8种常见的经典排序,基本涵盖了所有的排序算法。 1.直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。 对第四个数、第五个数……直到最后一个数,重复第二步。如题所示: 直接插入排序(Straight Insertion Sorting)的基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 代码实现: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。 设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。 从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。 将当前数放置到空着的位置,即j+1。 代码如下: 1 public void insertSort( int [] a){ 2 int len=a.length; // 单独把数组长度拿出来,提高效率 3 int insertNum; // 要插入的数 4 for ( int i=0;i<len;i++){

Java常用的八种排序算法与代码实现

萝らか妹 提交于 2021-02-01 23:52:26
排序问题一直是程序员工作与面试的重点,今天特意整理研究下与大家共勉!这里列出8种常见的经典排序,基本涵盖了所有的排序算法。 1.直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四个数、第五个数……直到最后一个数,重复第二步。如题所示: 直接插入排序(Straight Insertion Sorting)的基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 代码实现: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。 设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。 从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。 将当前数放置到空着的位置,即j+1。 代码如下: 1 public void insertSort(int [] a){ 2 int len=a.length;//单独把数组长度拿出来,提高效率 3 int insertNum;//要插入的数 4 for(int i=1;i<len;i++){//因为第一次不用

初级软件测试工程师工资(薪资待遇)一般是多少?

一个人想着一个人 提交于 2021-02-01 20:24:40
点击上方蓝色“ 程序员一凡 ”,选择“设为星标” 主页点击“ 领取资料 ”获取整理好的 学习资源 那接下来,我们要讲的是从软件测试这个岗位与职责,以及对应的标准薪资范畴 到底软件测试它不同的层次它要负责一些什么样的事情,对于软件测试这个岗位呢,第一个,它要求的东西确实非常的多,比如说你要懂数据库,又要懂Linux,还要懂接口,还要懂自动化,还要懂编程语言,等等之类的。 那是不是每一个岗位都必须要有这么多的技能才能够去做呢,其实并不是。 (初级软件测试工程师) 这是一凡从招聘网站上,截取的面试岗位信息。这两个都是初级软件测试工程师,初级测试工程师有一个范围5-10K。那也就是意味着有些小伙伴出去之后,他拿到的薪资只有5K,但是有些小伙伴出去之后他拿到的薪资就有10K。 可能你们两个的起点是差不多的,就比如说我都是刚毕业一年,或者应届生。 那为什么会有这么大薪资的差别呢,它的原因在哪里呢? 给大家简单的分析一下上面两个招聘置位需求。 初级软件测试工程师职责: 1.设计用例、维护用例 -- 等价类、边界值、场景法、因果图…… 2.执行用例的能力 --这一个是非常简单的,那也就是你做为一个初级测试工程师 必须 要具备的能力,你可能不会写测试用例有些公司可以接受,我急的时候,我可能只要招一个能够执行用例并且提交bug的人就OK了,你暂时不会写测试用例没关系,我们公司有别的人来写。

面试10家公司...从刚开始的危机感到绝地求生的自救之路

独自空忆成欢 提交于 2021-02-01 18:50:24
摘要:2021年,30岁,测试员,我面试了10家公司…… 01 我是谁? 大家好,我是胖虎,30岁,一名历经沧桑,看透互联网行业百态的测试从业者,经过数年的勤学苦练,精钻深研,终于从初出茅庐的职场新手成长为现在的测试老鸟,不知不觉已经从事测试工作三年半了,这三年在同一家公司并未跳槽,今年在合适的契机选择了换一家公司,在这里总结下我这次跳槽的一些面试经验。 为何今年选择换公司呢?其实最初完全没有此打算的,年中的时候领导找我谈话说要给我涨工资,满心欢喜,然后等待了两个月说被拒绝了,要再申请,加上公司组织结构面临更改,说还要等一等,一直拖到10月说要明年2月才能涨。我本不是喜欢去追问的人,做起事情来也忘了这些事,但想起来的时候总是郁闷,另一个同事也是如此境地,她总是问,问了给我讲一讲情况,多几次自己也就失望了。 再加上那段时间自己对于自己的职业规划大致的有了一个想法,我开始更多地跟开发交流,我把开发的代码从svn服务器上下载下来看,评审需求的时候我也能从需求中提炼出一些编程需要。 说真的我觉得自己规划的有点晚,后来越来越觉得自己呆的项目不是自己想要的项目,大家没有凝聚力,做起事情来很拖不动的感觉,领导在管理方面也让我觉得很郁闷,感觉自己迫切的需要出去看看外面的项目,感受正轨的软件开发测试流程。 02 跳槽前做了一些准备 十月中旬我决定找工作,决定无论如何我都要离开项目组。由于第一次跳槽

图解 | 你管这破玩意儿叫TCP?

依然范特西╮ 提交于 2021-02-01 11:12:11
低并发编程,周一很颓废,周四很硬核 你是一台电脑,你的名字叫 A 经过 《如果让你来设计网络》 这篇文章中的一番折腾,只要你知道另一位伙伴 B 的 IP 地址,且你们之间的网络是通的,无论多远,你都可以将一个数据包发送给你的伙伴 B 这就是物理层、数据链路层、网络层这三层所做的事情。 站在第四层的你,就可以不要脸地利用下三层所做的铺垫,随心所欲地发送数据,而不必担心找不到对方了。 虽然你此时还什么都没干,但你还是给自己这一层起了个响亮的名字,叫做 传输层 。 你本以为自己所在的第四层万事大吉,啥事没有,但很快问题就接踵而至。 问题来了 前三层协议只能把数据包从一个主机搬到另外一台主机,但是,到了目的地以后,数据包具体交给哪个 程序 (进程)呢? 所以,你需要把通信的进程区分开来,于是就给每个进程分配一个数字编号,你给它起了一个响亮的名字: 端口号 。 然后你在要发送的数据包上,增加了传输层的头部, 源端口号 与 目标端口号 。 OK,这样你将原本主机到主机的通信,升级为了 进程和进程之间的通信 。 你没有意识到,你不知不觉实现了 UDP 协议 ! (当然 UDP 协议中不光有源端口和目标端口,还有数据包长度和校验值,我们暂且略过) 就这样,你用 UDP 协议无忧无虑地同 B 进行着通信,一直没发生什么问题。 但很快,你发现事情变得非常复杂...... 丢包问题 由于网络的不可靠

图解 | 你管这破玩意儿叫TCP?

雨燕双飞 提交于 2021-02-01 11:11:59
来源 | 低并发编程 作者 | 闪客sun 你是一台电脑,你的名字叫 A 经过 《如果让你来设计网络》 这篇文章中的一番折腾,只要你知道另一位伙伴 B 的 IP 地址,且你们之间的网络是通的,无论多远,你都可以将一个数据包发送给你的伙伴 B 这就是物理层、数据链路层、网络层这三层所做的事情。 站在第四层的你,就可以不要脸地利用下三层所做的铺垫,随心所欲地发送数据,而不必担心找不到对方了。 虽然你此时还什么都没干,但你还是给自己这一层起了个响亮的名字,叫做 传输层 。 你本以为自己所在的第四层万事大吉,啥事没有,但很快问题就接踵而至。 问题来了 前三层协议只能把数据包从一个主机搬到另外一台主机,但是,到了目的地以后,数据包具体交给哪个 程序 (进程)呢? 所以,你需要把通信的进程区分开来,于是就给每个进程分配一个数字编号,你给它起了一个响亮的名字: 端口号 。 然后你在要发送的数据包上,增加了传输层的头部, 源端口号 与 目标端口号 。 OK,这样你将原本主机到主机的通信,升级为了 进程和进程之间的通信 。 你没有意识到,你不知不觉实现了 UDP 协议 ! (当然 UDP 协议中不光有源端口和目标端口,还有数据包长度和校验值,我们暂且略过) 就这样,你用 UDP 协议无忧无虑地同 B 进行着通信,一直没发生什么问题。 但很快,你发现事情变得非常复杂...... 丢包问题

用PHP做一个领取优惠券的活动

南楼画角 提交于 2021-02-01 11:11:18
业务需求 优惠券活动,具体还是要根据自己的需求。以下是最近实现的优惠券活动,主要的业务需求:根据后端设置优惠券模板,用户类型设置,优惠券活动的开始与结束时间,最后生成不同的优惠券活动链接。 代码环境: 源码主要laravel5.8,一整个活动要贴的代码很多,下面主要贴核心代码,仅供参考。主要还是要根据自己的业务需求来实现功能吧。 以下是后端截图,做成模块化 前端需要做的设置与限制: 1 判断优惠券是否存在或者停用 2 判断活动开始时间与优惠券开始时间 接着领取活动优惠券,需要判断以下情况: 1 活动已结束 2 活动为开始时 3 活动为新用户领取,而领取的用户是老用户 4 活动为老用户领取,而领取的用户是新用户 5 优惠券是否领取完 6 已领取过优惠券提示 7 领取成功 下面核心代码实现 /** * Function:优惠券领取处理 * Author:cyw0413 * @param $params * @return array * @throws \Exception */ public function doCoupon ( $params ) { $activity_id = $params [ 'activity_id' ]; if ( ! $params ){ throw new \Exception ( "参数错误!" ); } $preg_phone = '/^1

又一P1故障,锅比脸圆

℡╲_俬逩灬. 提交于 2021-02-01 11:07:17
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。 好久没遇到故障了,以至于技术老大在公司会议上,都成了隐形的存在,除了 汇报进度 一无是处,这是不能容忍的。 只有有问题才能驱动团队的成长。风平浪静的时候,公司领导以为你做的不好,没有暴露风险: 既然已经做的这么完美了,要你何用 。 所以做的太好了,对团队来说未必是一件好事---尤其是对于有受迫害妄想症的公司来说。 上面这个截图,我已经见过很多次了,展示了一些无奈的现实。对于团队来说,也没啥两样。 及时制造问题,是一个合格的管理者应尽的责任。 老板骂你一顿,然后接下来继续倚仗你;比老板对你客客气气,然后接下来扔你进火坑,要妙的多。 打是亲,骂是爱,客客气气要完蛋。 这就是 劣币驱逐良币 ,公司管理要避免出现这种情况。但我们今天的主题不是这,而是一个P1故障。 这不,昨天下午,公司领导的电话就被打爆了: “商户的账号都登陆不上了,单点登录崩了么?” “这次影响面很大,用户什么都操作不了了,系统要完玩么?” “抓紧处理!出了这么大的事,要协调起来!” “查一下操作记录!是不是有人删库。” 事情很大,有客户直接call了老板。圣旨层层传递,终于到了苦逼的研发部。 躲在角落里的我,一脸蒙圈。赶紧使用测试账号登录后台。 您输入的密码错误,请稍后再试。 这也难怪有人想到了删库。最近互联网戾气严重,频繁出现 玉石俱焚

图解 | 你管这破玩意儿叫TCP?

|▌冷眼眸甩不掉的悲伤 提交于 2021-02-01 11:06:10
你是一台电脑,你的名字叫 A 只要你知道另一位伙伴 B 的 IP 地址,且你们之间的网络是通的,无论多远,你都可以将一个数据包发送给你的伙伴 B 这就是物理层、数据链路层、网络层这三层所做的事情。 站在第四层的你,就可以不要脸地利用下三层所做的铺垫,随心所欲地发送数据,而不必担心找不到对方了。 虽然你此时还什么都没干,但你还是给自己这一层起了个响亮的名字,叫做 传输层 。 你本以为自己所在的第四层万事大吉,啥事没有,但很快问题就接踵而至。 问题来了 前三层协议只能把数据包从一个主机搬到另外一台主机,但是,到了目的地以后,数据包具体交给哪个 程序 (进程)呢? 所以,你需要把通信的进程区分开来,于是就给每个进程分配一个数字编号,你给它起了一个响亮的名字: 端口号 。 然后你在要发送的数据包上,增加了传输层的头部, 源端口号 与 目标端口号 。 OK,这样你将原本主机到主机的通信,升级为了 进程和进程之间的通信 。 你没有意识到,你不知不觉实现了 UDP 协议 ! (当然 UDP 协议中不光有源端口和目标端口,还有数据包长度和校验值,我们暂且略过) 就这样,你用 UDP 协议无忧无虑地同 B 进行着通信,一直没发生什么问题。 但很快,你发现事情变得非常复杂...... 丢包问题 由于网络的不可靠,数据包可能在半路丢失,而 A 和 B 却无法察觉。 对于丢包问题,只要解决两个事就好了。