用php写一个可以抽取随机数的工具一次只抽四个怎么实现?_面试了一个32岁的程序员,场面一度很尴尬。...

c524f5b742938134eb370e6c5cb479f2.png

招人背景

首先说一下朋友的公司招人背景,公司招聘PHP高级岗位,负责公司的B2B项目研发、并发问题的处理和解决。领导给了他两个要求:(接下来的讲述我会以朋友的第一人称来进行)

(1)技术比较好

(2)有大项目实战经验。

说白了这是一个纯粹的技术岗位,能够把项目核心代码解决好来,能够去处理好的并发带来的一些问题,避免一些隐患问题。

干我们这行的都懂,大厂都在清理 35 岁以上的基础岗,如果到了这个年纪还混不到中高层管理岗位,基础岗确实不太好找了。

现在的年轻人很厉害,很年轻就走上了管理层,所以我很庆幸公司在年龄上没有卡人,给了很多 30+ 的程序员简历供我筛选,因为我也是程序员,所以我不会在年龄上有所顾虑。

所以,确实就和标题写的那样,这两天我就面试了一个 32岁程序员,全程让我都感觉有点慌……

为什么慌?主要是因为年龄比我大不少,项目经验肯定也比我丰富得多,技术会不会很牛逼?会不会吊打我,狠狠地虐我?我真心怕 hold 不住。

但实际面试下来,场面一度尴尬,结局让我感觉有点唏嘘。

5ce17137f1d271ef10c4e0f3e7df652f.png

面试过程

面试者 11年工作经验,简历却只有 2 页,可以说非常简练,从程序员到小组长、项目经理、研发经理、技术总监都干了个遍,Java/PHP/Python/C# 也都有涉及。

从交谈过程中,他说是可以做一些优化的,能够去解决一些并发问题,自己的项目经验也比较丰富。首先我说先问些技术问题,然后在了解一下你的相关开发项目。

我: 你有互联网分布式相关项目开发经历么?

面试者: 有啊,那个 XXX 项目就是

我: 好,我看到了,我看这个项目有解决一些高并发的问题,那么我们就先来讲一个普通的场景,因为你项目经验比较丰富,我就不单问技术情况了,就说说场景是如何发生和去解决的。如果有一个普通场景,就是1000个用户下单一批商品,这个商品是多个,不是活动,但是库存只有100,这个情况。

面试者: 这个情况的话就可以使用传统的队列去解决

然后他就一直在说和用队列的处理的方式,之前他是如何处理的,首先,我不是很关心他之前做的一些业务,然后我就打断了他,就是普通的场景,不是说做活动。

面试者:那就根据实际的情况来,可以选择乐观锁的方式或者说分布式锁的方式。

我:嗯,那你说说实现方式,这个点这样用锁会比较好吗?

面试者:那乐观锁的话就是可以使用redis 的watch方法去做,监听一下我们的销量,然后配合redis事务去使用,然后就开始介绍分布式锁。

我:额。。我在打断一下,你使用队列或者锁在这种场景下都会去降低很多的这种项目的吞吐量,那这个的话不是会造成用户的阻塞等待?这样的话系统的吞吐量就会很差了。而且你不管前面用什么方式你最终都要落地到数据库的,那么这个怎么处理呢?

面试者:一般来说都不会在mysql处理呀,用缓存不就可以了。

可能他项目规模都不是很大,对于这种问题只能够去回答一些比较官方的解决方案。

我: 能介绍下服务与服务之间相互调用的时候,如果调用超时了是怎么处理的?

面试者: 超时啊,(想了几秒后)那应该是报错吧

我: 确定是报错吗?(他想了想,不说话,然后我接着说)没有重试机制吗?重试机制是怎样的?

做过分布式的项目的都知道重试机制,至少读操作要支持重试,写操作支持重试的话被调用方还要支持幂等性,不然会造成重复写入。

面试者: (又想了想,笑着和我说)这个项目有点久了,这个不太记得了……

然后我看了下这个项目,2014 年做的,6 年前了,他说太久不记得了,那也情有可原了。

我:好,你最近做的这个项目,能介绍下它的整体架构么?

面试者: 我们用了 Redis做虚拟库存,用了 MQ,用了微服务……(他说了一堆,都没说到重点)

我: 我想问的是,从上到下,这些技术是怎么承接起来的,整体的系统架构是怎样的?(现场没纸笔,不然我都想让他画图了)

面试者: 呃……我知道你的意思,主要是我真的不知道怎么表达……(然后他不说话了,场面尴尬了)

我: (赶紧找了继续追问了一个幂等性问题,因为做分布式的话这块肯定是会遇到的)那你如何理解幂等性呢?

面试者:就是我们使用mq的时候我们会有一个自带的id,然后根据这个id去判断是否被消费,如果已经被消费,那么你就不处理。

我: 不一定就是MQ,就是比如你做一个分布式的接口,那么这个接口的幂等性如何解决?

面试者:那就只能写一个标记了.......如果这个接口被调用了的话,那么你就标记他被调用,这样其他地方就根据这个标记去判断是否还可以调用……(想了半天也没有说出好的方案)

其实这里至少有三个方案:

接口为什么要实现幂等?
前端重复提交选中的数据,后台只产生对应这个数据的一个反应结果。

(1)token机制
当客户端请求页面时,服务器会生成一个随机数token,并且将token放置到session当中,然后将token发给客户端(一般通过构造hidden表单)。下次客户端提交请求时,token会随着表单一起提交到服务器端。服务器端第一次验证相同过后,会将session中的token值更新下,若用户重复提交,第二次的验证判断将失败,因为用户提交的表单中的token没变,但服务器端session中token已经改变了。

(2)通过版本号实现-乐观锁

这个的话就要分情况,因为加锁的话毕竟会对性能有一些影响

(3)Redis原子性

(4)去重表

利用数据库表单的特性来实现幂等,常用的一个思路是在表上构建唯一性索引。将某个内容id与用户id绑定建立唯一索引,每当用户点击这个内容时就往表中写入一条数据,这样重复点击的数据就无法写入。

9bb3cda08be2a7cd599ba0a49617227e.png

然后我就问了一些他目前主要负责的项目,项目大概的规模,你自己在项目当中遇到的比较棘手的问题,你们是如何去解决的。了解了一些发展,为什么从上家公司离职这些问题。

总结

最后我把面试情况总结起来和领导说了,领导就说了一句:技术是提前。

第一次面试一个 32 岁的程序员,干了 11 年,如果还要面试做技术的岗位,这个面试情况确实不理想。也不知道他的真实经历是不是一直在外包公司?或许真该清楚认识下自己的定位和未来的职业规划了。

随着我跟朋友的沟通到下来这个文章,其实我也在感慨,朋友说他也感觉更慌了,日月如梭,他也快有这么一天了,如果做不到中高层,也要去和年轻抢饭碗,没办法,这是现实。

年纪来了,朋友感觉自己写代码确实也写不太动了,人也变得越来越焦虑不安,能干嘛去呢?路子也不多,也不知道该如何去发展!

唯一能做的就是朝着自已期望的岗位或者目标不断努力,不断的提升自己的硬实力和基本功,最好的贵人就是拼命努力的自己,程序员的核心竞争力就是你的技术水平,管理能力,只有这些都提升上来了,这样才能去为日益焦虑不安的自己,迎接未来更多的机会。

其实现在也有很多年轻人很厉害,年轻有为的也不少,但是还是要记住一句话,种一棵树最好的就是十年前,其次就是现在,如果你不去开始,那么你永远都不会有成功之花绽放在自己人生的枝头上。大器晚成,为时也不晚,这样的例子也数不胜数,所以你要相信,只要自己一直在准备,找到自己的职业道路,学习规划,机会总会到来的,总会有成功之花绽放的那一天。

如果你喜欢我写的技术文章以及面试总结,欢迎关注收看我的视频,并且点赞、收藏、关注我哦。

我是luke,感谢你的关注!

据说点赞,喜欢,收藏了的小伙伴升职加薪、面试必过,拿到心仪offer!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Native之导出

1 React Native里面一般导出函数或者常量或者组件 如果是默认组件或者类(export default修饰)的话,在另外一个地方导入的时候不需要加上{},格式如下 导出 export default class Student {} 导入 import Student from "./file"如果不是默认组件或类或则方法或则变量…

Windows 11 新版 22598 发布!引入 4K 聚焦壁纸,优化全新任务管理器和媒体播放器...

面向 Dev 和 Beta 频道的 Windows 预览体验成员,微软现已发布 Windows 11 预览版 Build 22598。主要变化1.微软宣布媒体播放器应用程序现已更新,进一步适配 Windows 11 的视觉设计。在播放视频时右键将看到全新的菜单,此外还提高了该应用的性…

Mealy状态机的一点理解

在Mealy状态机中,输出是由输入和现态决定的。而状态机的次态是由输入的变化和现态决定的。这个特点决定了再verilog中实现的方式。建议简单的状态机就使用两段式always结构。 一个always中进行状态的转换,一个always中进行输出状态的变化。 刚刚已经说过…

js运行机制

说到js的运行机制,那么就要先从几个名词开始,这是为了让更多的人能看懂。如下:进程和线程:进程:进程是正在运行的程序的实例。程序关于数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位&#…

javafx 推箱子小游戏object类_突破LeetCode Hard模式之《推箱子》

导读:算法哥好久没分享有趣的算法题了,有点寂寞空虚冷,今天看到一道似曾相识的题目,而且难度是hard模式,勾起了算法哥的征服欲。特分享之!题目描述「推箱子」是一款风靡全球的益智小游戏,玩家需…

利用Excel VBA实现批量数据分组转置

问题:如上图所示,按lon,lat分组,再进行转置。 VBA代码: Sub admin()Dim conn, xRs, xFdSet conn = CreateObject("ADODB.Connection")conn.Open "Provider=Microsoft.Jet.Oledb.4.0;" & _"Extended Properties= Excel 8.0;hdr=yes;IMEX=1 …

.NET 7 Preview 3添加了这些增强功能

.NET 7 Preview 3 已发布, .NET 7 的第三个预览版包括对可观察性、启动时间、代码生成、GC Region、Native AOT 编译等方面的增强。有兴趣的用户可以下载适用于 Windows、macOS 和 Linux 的 .NET 7 Preview 3。Microsoft 建议使用Visual Studio 17.2 Preview 3 的 预…

MySQL基本分区表

2019独角兽企业重金招聘Python工程师标准>>> 准备工作 1、查看数据库的信息 了解当前的Mysql数据库的版本和平台以及字符集等相关信息 mysql> status -------------- mysql Ver 14.14 Distrib 5.6.17, for Win64 (x86_64)Connection id: 4 Current dat…

分段线性拟合经典案例:计算多年气温最低值和最高值的分段线性变化趋势(附分段线性拟合工具下载)

分段线性回归:是用虚拟变量估计不同数量水平的解释变量对被解释变量的影响。在经济关系中,当解释变量X的值达到某一水平X′之前,与被解释变量之间存在某种线性关系;当解释变量X的值达到或者超过X′以后,与被解释变量的关系就会发生变化。此时,如果已知X的转折点X′,我们…

谷歌不支持调用摄像头麦克风_谷歌发布安卓11系统:全新界面、更严的隐私管理...

来源:快科技在发布三个beta版之后,谷歌刚刚发布了安卓11(Android 11)正式版,主要加强了聊天气泡、安全隐私、电源菜单,以及对各种新屏幕,如瀑布屏、折叠屏、双屏的支持。最近几个版本的安卓系统其实变化都不是很大&…

POJ2676,HDU4069解决数独的两种实现:DFS、DLX

搜索实现:解决数独有两种思考策略,一种是枚举当前格能填的数字的种数,这里有一优化策略就是先搜索能填入种数小的格子;另一种是考虑处理某一行(列、宫)时,对于某一个没用过的数字,若…

工业互联网上市公司.NET开发岗位来袭!!!

01公司简介2022 ABOUT /公司简介安徽容知日新科技股份有限公司(股票代码:688768)于2007年在合肥市成立,是一家工业互联网领域的高新技术企业,为客户提供设备智能运维平台解决方案和动设备预测性维护产品及服务。容知日…

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记24 popovers弹窗

上几话中我们详细了解了几种segue,我们也了解到了多MVC模式的几种控制器,比如导航、选项卡和分栏,除了这三种多MVC的模式之外,还有一种popover,它跟其他三种不太一样。首先先来认识一下popover(弹窗&#x…

React Native之didFocus和didBlur

1 didFocus和didBlur解释 didFocus - the screen focused (if there was a transition, the transition completed)didBlur - the screen unfocused (if there was a transition, the transition completed) didFocus是指当前页面第一次加载的时候会调用一次 didBlur是指当前…

python语法详解_解析 Python3 基础语法

行与缩进 python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。 缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下: if True: print ("True") else: print ("False") Color…

ASP.NET 6 中间件 - 介绍与基础

这是一个关于 .NET 6 中间件的系列文章。在这个系列中,我们将了解到什么是中间件,它能够做什么,以及我们为什么要使用它,并演示几种不同类型的中间件的实现。之后,我们会进一步了解中间件所在的管道,以及如…

数组的迭代数组里面每个对象添加属性值_JS数组和对象循环遍历的几种实现方式...

数组遍历1. 普通for循环let arr [1,2,3,4,5] for (let i 0; i < arr.length; i) {console.log(arr[i]) } // 输出结果 // 1 // 2 // 3 // 4 // 52. 优化普通for循环let arr [1,2,3,4,5] for(var j 0,len arr.length; j < len; j){console.log(arr[j]); }3. forEach循…

Blend4精选案例图解教程(三):一键拖拽

原文:Blend4精选案例图解教程&#xff08;三&#xff09;&#xff1a;一键拖拽拖拽效果&#xff0c;常规实现方法是定义MoveLeftDwon、MoveLeftUp、MouseMove事件&#xff0c;在Blend的世界里&#xff0c;实现对象的拖拽&#xff0c;可以不写一行代码&#xff0c;而且非常简单&…

python画气泡图_​用Python把图做的好看点:用Matplotlib画个好看的气泡图

我们继续来把简单的图形丢到极坐标&#xff0c;这次是气泡图和柱状图&#xff0c;临摹的对象是澎湃美数课这个图看起来很好看&#xff0c;原理其实很简单&#xff0c;把柱状图和气泡图从笛卡尔坐标系中转移到极坐标系中来就OK 我们开始本次的临摹吧 本期的主题如下&#xff1a;…