用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,一经查实,立即删除!

相关文章

gdb可以查询执行文件的宏, 但是查询不了o文件的宏

在gcc使用-g3编译的时候, gdb可以查看对应c语言的宏. gdb a.out -ex list main -ex info macro XXXX -ex q Defined at /xvdc/w.c:6 #define XXXX ppppppppppppp 但是o文件却看不了对应的宏, gdb w.o -ex list main -ex info macro XXXX -ex q The symbol XXXX has no defin…

Python-os.path 学习

import osprint(#########################) # 当前路径 绝对路径 print("path is:\t", os.path.abspath(__file__)) # 当前路径 绝对路径 上一级目录 print("path is:\t", os.path.abspath(".")) # 当前路径 绝对路径 上上一级目录 print("…

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 的视觉设计。在播放视频时右键将看到全新的菜单,此外还提高了该应用的性…

Excel VBA将所有Sheet重命名为单元格a1的名称

Sub RenameSheet() Dim i As Integer For i 1 To Sheets.CountSheets(i).Name Sheets(i).Range("A1").Value Next End Sub

Mealy状态机的一点理解

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

怎样连接mysql文件_如何连接MYSQL数据库?

假设您的mysql数据库资料如下:MYSQL数据库名: testMYSQL帐号:public_test1MYSQL密码:test2免费赠送三级域名:test.u8.1358.netMYSQL数据库的管理:请您首先下载PhpMyAdmin软件,将此文件包解压,找到其中的一个…

得到时间字符串|程序当前的目录

CTime time CTime::GetCurrentTime();CString name_t time.Format("%Y%m%d%H%M%S"); //获得应用程序路径和资源文件路径GetModuleFileName(NULL, FilePath, MAX_PATH);(_tcsrchr(FilePath, _T(\\)))[0] 0; 转载于:https://www.cnblogs.com/mycway/p/4439619.html

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 …

Git之Stash(储藏)备份当前的工作区的内容

1 今天遇到的问题 我Git关联的项目,本地做了修改,然后我需要git pull拉别人的代码或者我需要修改其它的bug,本地做了修改我又不想合并,这个时候就可以使用git stash git stash:备份当前的工作区的内容,将当前的工作区内容保存到Git栈中 git stash list:显示Git栈内的所有备份…

Comparison of video container formats

Comparison of video container formats MOV跟MP4具体区别在哪里?转载于:https://www.cnblogs.com/jingzhishen/p/5205235.html

.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…

mysql分页存储过程 分页查询语句_分页存储过程(用存储过程实现数据库的分页代码)...

用存储过程实现数据库的分页代码,加快页面执行速度。具体的大家可以测试下。--*******************************************************--* 分页存储过程 *--* 撒哈拉大森林 *--* 2010-6-28 *--*******************************************************if exists(select * f…

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

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

Git之删除文件

1 问题 git关联删除文件 2 git 删除命令 git rm file 3 svn 删除命令 svn delete file

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

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