惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
C
Cisco Blogs
The Hacker News
The Hacker News
T
Tor Project blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Register - Security
The Register - Security
云风的 BLOG
云风的 BLOG
Simon Willison's Weblog
Simon Willison's Weblog
P
Palo Alto Networks Blog
Vercel News
Vercel News
C
CERT Recently Published Vulnerability Notes
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
I
Intezer
aimingoo的专栏
aimingoo的专栏
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
Microsoft Security Blog
Microsoft Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
P
Proofpoint News Feed
P
Proofpoint News Feed
B
Blog
T
Threat Research - Cisco Blogs
博客园 - 叶小钗
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
Engineering at Meta
Engineering at Meta
G
Google Developers Blog
PCI Perspectives
PCI Perspectives
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
Application and Cybersecurity Blog
Application and Cybersecurity Blog
MyScale Blog
MyScale Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Schneier on Security
Schneier on Security
N
News | PayPal Newsroom
C
Cybersecurity and Infrastructure Security Agency CISA
H
Help Net Security
博客园 - 聂微东
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
GRAHAM CLULEY

WangDeer

非机动车交通规则测验 微软 50 周年壁纸是在 macOS上设计的? 「转」西二旗折叠:蜂巢经济学启示录 难得空明 Ubuntu Clean ApidocJs apigroup Support Chinese int(10)里面的10是什么意思? 5-3 会话 2021-03-25 「PHP架构师」面试准备 Laravel 上传 Docx 文件,表单验证不通过 4-4 发送信号 4-3 信号集 4-2 编写中断信号处理程序 4-1 什么是中断信号(软中断) 3-7 进程查看 3-6 SUID特权进程 3-5多进程编写 3-4进程调度 3-3进程exec 3-2进程退出和回收 3-1进程标识与fork 2-3解释器文件 2-2命令行参数与环境参数表 2-1程序与进程 1-1课程介绍 终极复盘 第八章 传承篇 第七章 自由篇 第六章 品牌篇 第五章 作品篇 第四章 定位篇 第三章 金钱篇 第二章 富人篇 第一章 财务自由篇 财富思维觉醒课前作业 This Set Cookie Was Blocked Because It Was Not Sent Over a Secure Connection 「转」Windows11右键恢复至Windows10模式 Ecshop 4.0 微信登录 一直循环授权登录 PHP判断指定日期是否为工作日 PHP Ajax 跨域请求允许多个域名 返回键劫持,强制跳转到指定链接 Chromium Adobe Flash Player下载 批量检查并清除BOM头 Ecshop之smarty与js冲突问题 Ecshop 广告位宽度值必须在1 1024之间 修改方法 PHP获取指定时区当前时间-PHP获取世界时钟 phpcms 更新栏目缓存 `PHP Has Encountered a Stack Overflow` 解决办法 php判断是否手机访问-php判断访问终端类型 丢了 如果昨天是明天的话就好了,这样今天就周五了 Ecshop自定义调用指定广告位 Destoon修改商务便签文字 Ecshop首页获取指定分类的推荐商品 QQ空间如何屏蔽好友刷屏广告 Css实现文字竖排 英尺(inch)、厘米(cm) JS转换 网页禁止鼠标右键 Destoon 选择支付方式 可单独关闭对联广告两枚 网页打开不是在最顶部,而是跳到中间位置解决方法 Ecmall iis 伪静态规则 Destoon 复制商城模块 QQ在线客服设置 QQ开启临时会话教程 Ecshop加入购物车js报错 IE浏览器“浏览器模式”和“文本模式” 网站图片在IE浏览器下不显示 Ecshop 去掉头部版权信息 echsop “transport.js/run() error:'process_request' 未定义”-解决方法 Ecshop Deprecated:Assigning the Return Value of New by Reference Is Deprecated in 报错解决方法 PHPCMS全局循环调用二级类目导航 如何使EditPlus打开tpl文件高亮显示代码 Ecshop前台英文后台中文实现方法 Ecshop安装报错warning:date_default_timezone_get() 1970年1月1日(00:00:00 GMT)Unix时间戳(Unix Timestamp) 黑莓bb微信 2.6 for os5 黑莓微信内测版问题总结及开发建议 360安全卫士卸载过程 管理距离AD值(Administrative Distance) 思科在中国的总代及金牌、银牌代理商 黑莓7100T拆机全程实录 CCNA静态路由配置实例 8700G国产壳白色,太粗糙了 黑莓7100T玉照曝光 黑莓手机电池的正确使用和保养 51啦统计不能打开,求分析,求解释 处女作,黑莓8707G4.2主题出炉 我的2011 Xweibo手机版底部版权修改 常用ping地址,逗逗搜索引擎,SEO必备 飞飞影视系统快播播放列表前缀修改 飞飞影视系统title修改 这才整明白啥叫被跨省,上网有风险,发帖需谨慎 为emlog添加Gravatar头像服务功能 三层交换机实现VLAN间通信 路由器的基本配置 路由器接口类型及连接方式 19岁双IE 谈Cisco认证 Secondary IP-Address 用途 儿童节NA战报 CCNA疑难解析之network x.x.x.x
2022-03-10 面试复盘
王二 · 2022-03-11 · via WangDeer

笔试题

40分钟,A4纸手写。

好多年都没握过笔了。

  1. MVC 中的 M, V, C 分别代表什么?

    我的答案:

    Model

    View

    Controller

    分析:回答比较粗浅,只写出了完整的单词。

  2. 以下代码的运行结果

        $value = FALSE;
    
        if (empty($value)) {
            echo 'null';
        } else {
            echo 'have value';
        }
    

    我的回答:have value

    正确答案:null

    分析:对 empty 方法记忆模糊不清。

    判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于false,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。

    ——empty

  3. 写出示例中日本电话号码的正则:03-1234-5678,06-1224-5989

    我的回答:正则不熟悉,随便写了些。

    正确答案:

    改进:系统学习下正则,之前也学过,用的时候还是习惯去搜现成的表达式。归根结底还是没学会。

  4. 写出下面代码的运行结果:

    $arr = [2, 3, 5, 8, 10, 9, 7, 5, 9];
    
    // 2 3 5 8 10 9 7 5 9
    // 0 1 2 3 4  5 6 7 8
    // 0 5
    // 1 8
    // 2 9
    // 3 9
    // 4 数组没有下标为10的元素 null
    
    $num = 0;
    for ($i = 0; $i < 5; $i++) { 
        $num += $arr[$arr[$i]];
    }
    
    echo $num;
    

    我的回答:31

    实际情况:

    PHP Notice:  Undefined offset: 10 in /code/demo11.php on line 28
    

    分析:分析出来下标为 10 的数组元素不存在会报错,答案硬是给写出来了个数字。感觉自己太教条了,认为程序的目的是算出一个数字,不管咋都要得出个结果。

  5. 在 Linux 下,从当前文件夹及子目录中查找内容中包含 old 的文件:

    我的答案:find -R ./* | grep 'old'

    正确答案:grep -lr 'old'

    分析:

    虽然现在主力系统是 ubuntu,但是平常搜文件都是图形界面搜索,查找某个字符也是直接在 VSCode 中直接全局查找。

    在终端查找的这些命令不熟悉,猜测是用 find 查找,结合用过的其他命令,拼凑了一个自己实际没用过的答案。

    改进:熟悉常用的 Linux 命令。

    • find,ps 这个我真不常用。
    • grep(1)print lines that match patterns. 在其他命令中捎带使用。比如: cat ~/.bashrc | grep ssh,不过笔试题这里用的是 grep(1p)
    • grep(1p)search a file for a pattern
  6. 写一个方法,不使用 PHP 内置函数,翻转一个字符串:

    我的答案:思路是把字符串分割成数组,然后重新排序,再拼回去。但是因为要用笔,纯手写,写了一通又划掉了。

    回来以后写的答案:

        function strReverse(string $str = '')
        {
            $strs = mb_str_split($str);
            return implode(array_reverse($strs));
            // 不知道这算不算使用内置函数
            // 直接使用内置函数: strrev($str);
        }
    
        echo strReverse('ni da ye de ...');
    

    分析:

    当时也没想起来用 mb_str_split 分割字符串,实际项目中也没用上过这个函数。

    想到的是 explode(实际是没办法按每个字符分割的),结果和 implode 老是搞混,写的是 implode

    数组翻转的函数名 array_reverse 当时也没想起来,说实话 strrev 我也没想起来,curd 的时候也没用上过。

  7. 写一个方法,不使用 PHP 内置函数,去重并打印数组中的数字:$arr = [5, 6, 5, 8, 10, 6, 9, 20];,打印结果为:5 6 8 10 9 20

    我的答案:虽然打印出来了,但是格式不对,中间没有空格。

    $arr = [5, 6, 5, 8, 10, 6, 9, 20];
    
    $tmp = [];
    
    foreach ($arr as $k => $v) {
        if (!in_array($v, $tmp)) {
            $tmp[] = $v;
            echo $v;
        }
    }
    

    回来后改进:

    $arr = [5, 6, 5, 8, 10, 6, 9, 20];
    
    $tmp = [];
    foreach ($arr as $k => $v) {
        if (!in_array($v, $tmp)) {
            $tmp[] = $v;
        }
    }
    
    echo implode(' ', $tmp);
    
  8. 写一个方法,获取文件 somefile.log 的文件扩展名:

    这道题出的不太清晰,是先读文件获取文件的真实扩展名呢,还是直接从文件名获取扩展,时间要紧咱选个简单的。

    我的答案:

    function getExtention(string $file)
    {
        return implode('.', $file)[1] ?? '';
        return explode('.', $file)[1] ?? ''; // 应该用 explode,因为记混了,用了 implode。
    }
    
    getExtention('somefile.log');
    

    回来后尝试:

    function getExtention(string $file)
    {
        return explode('.', $file)[1] ?? '';
    }
    
    echo getExtention('somefile.log');
    

    改进,当时没考虑到 xxx.xxx.xx.log 这种情况,经 大佬 提醒,做如下改进:

    function getExtention(string $file)
    {
        $res = explode('.', $file);
    
        return end($res) ?? '';
    
        // 这里为啥不像下边这样写呢? 参见手册
        // return end(explode('.', $file)) ?? '';
    }
    
    echo getExtention('xxx.xxx.somefile.log');
    

    endend(array|object &$array): mixed

    将 array 的内部指针移动到最后一个单元并返回其值。

    array 这个数组。 该数组是通过引用传递的,因为它会被这个函数修改。 这意味着你必须传入一个真正的变量,而不是函数返回的数组,因为只有真正的变量才能以引用传递。

  9. 什么是「数据库事务」和「存储过程」,两者有啥区别?

    我的答案:事务,保证数据的原子性,方便回滚。存储过程没了解过,也没用过。

    分析:心里明白一点,写的时候只记起来了原子性和回滚。

    改进:

    • 数据库事务,(简称:事务)(英语:transaction)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

      数据库事务通常包含了一个序列的对数据库的读/写操作。包含有以下两个目的:

      1. 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。

      2. 当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

      当事务被提交给了数据库管理系统(DBMS),则DBMS需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。

      ACID性质:

      • 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
      • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
      • 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
      • 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
    • 存储过程,又称存储程序(英语:Stored Procedure),是在数据库存储复杂程序,以便外部程序调用的数据库对象,可以视为数据库的一种函数或子程序。

      优点:

      • 存储过程可封装,并隐藏复杂的商业逻辑。
      • 存储过程可以回传值,并可以接受参数。
      • 存储过程无法使用 SELECT 指令执行,因为它是子程序,与查看表、资料表或用户定义函数不同。
      • 存储过程可以用在资料检验,强制实行商业逻辑等。

      缺点:

      • 存储过程,往往定制于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
      • 存储过程的性能调校与撰写,受限于各种数据库系统。
  10. 数据库索引和关联查询、插入一条数据、删除符合条件的数据。

    没啥可说的,这块没啥问题。

人事面试

查户口

Q. 自己创业散漫惯了,能不能适应固定上班的节奏?之前也有创业失败的,来干了几天不适应走了。

A. 可以,创业也是按时上下班,作息规律。

Q. 客户是日本的要求非常严格,做什么都要文档先行(日语文档),跟国内开发流程不一样,能不能接受?

A. 可以,这有啥接受不了的。

Q. 有啥优点?

A. 做过的项目比较多,客户简单描述一下就能精准理解客户需求。

HR. 客户是日本的要求非常严格,你这优点没用。(WTH?)

Q. 期望薪资多少?

A. 回答完以后,人事有点惊讶。(ps 跟这个岗位写的也没差多少)

其他的没啥可总结的。

技术面试

涉及技术方面的提问:

Q. 设计模式:

A. 知道的几个设计模式名称说了下,让具体讲一下,咱确实不清楚。

Q. 索引为啥使用 B+ tree?

A. 这玩意也没自己研究过。

B+ 树是一种树数据结构,通常用于数据库和操作系统的文件系统中。B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入,这与二叉树恰好相反。

B+ 树在节点访问时间远远超过节点内部访问时间的时候,比可作为替代的实现有着实在的优势。这通常在多数节点在次级存储比如硬盘中的时候出现。通过最大化在每个内部节点内的子节点的数目减少树的高度,平衡操作不经常发生,而且效率增加了。这种价值得以确立通常需要每个节点在次级存储中占据完整的磁盘块或近似的大小。

B+ 背后的想法是内部节点可以有在预定范围内的可变量目的子节点。因此,B+ 树不需要像其他自平衡二叉查找树那样经常的重新平衡。对于特定的实现在子节点数目上的低和高边界是固定的。

B+ 树的创造者 Rudolf Bayer 没有解释B代表什么。最常见的观点是B代表平衡(balanced),因为所有的叶子节点在树中都在相同的级别上。B也可能代表Bayer,或者是波音(Boeing),因为他曾经工作于波音科学研究实验室。

—— B+树

首先需要澄清的一点是,MySQL 跟 B+ 树没有直接的关系,真正与 B+ 树有关系的是 MySQL 的默认存储引擎 InnoDB,MySQL 中存储引擎的主要作用是负责数据的存储和提取,除了 InnoDB 之外,MySQL 中也支持 MyISAM 作为表的底层存储引擎。

  • 哈希虽然能够提供 O(1) 的单数据行操作性能,但是对于范围查询和排序却无法很好地支持,最终导致全表扫描;
  • B 树能够在非叶节点中存储数据,但是这也导致在查询连续数据时可能会带来更多的随机 I/O,而 B+ 树的所有叶节点可以通过指针相互连接,能够减少顺序遍历时产生的额外随机 I/O;

—— 为什么 MySQL 使用 B+ 树

Q. 索引什么情况下失效?

A. like 查询左右匹配的时候,其他的跟字段查询的顺序有关,现在好像是智能打的不影响了。

一张图搞懂MySQL的索引失效

一张图搞懂MySQL的索引失效

Q. Redis 在哪些地方应用过:

A. 会话存储,任务队列。

其他记不清了。

后续

面试完,让等通知,就知道没戏了。

上午约了个回家顺路的初创小公司面试,老板说下午开始就居家办公了,没下文了。

一路走回去,碰到个天桥呆坐了几十分钟。

想想自己也是废了。


顺手拍了几张照片:

点穴会所

点穴会所

看鹅

城墙边,护城河,春风吹水起轻波。帅的哥,不帅的哥,一起呆呆看河里鹅。

这一张图片转自这里,带走了我一天的沮丧。

——《在西安》蟠桃叔的日常随拍第一季

原微信公众号文章作者已经删除了,刚又搜索了一下,竟然找到了原作者的豆瓣,所以把豆瓣链接更新上来。

——2023-09-18 12:19:52

火车站天桥0

15、16年的时候,每天骑自行车回家(单程12.5KM),都会停到这里看看火车。

现在都快骑不动了。

火车站天桥1

火车站天桥2

你们坐那儿在思考什么?

火车站天桥3

我坐这儿在思考什么?

火车站天桥上4

建成不久火车站北广场

大红灯笼高高挂

大华1935的仿旧餐馆


哪位大佬需要人?能不能捞我一把?

干活很给力的。