面试

高效PHP Redis缓存技术,可参考下步骤

 ̄綄美尐妖づ 提交于 2021-01-05 14:48:16
是否想过PHP使用redis作为缓存时,如何能: 前后台模块共用Model层; 但是,不能每个Model类都进行缓存,这样太浪费Redis资源; 前后台模块可以自由决定从数据库还是从缓存读数据; 没有冗余代码; 使用方便。 这里我们先展示实现的最终效果。 最终的代码和使用说明请移步Github: https:// github.com/yeszao/php-r edis-cache 。 马上安装使用命令: $ composer install yeszao/cache 经过简单配置就可以使用,请参看Github的README说明。 1 最终效果 假设在MVC框架中,model层有一个Book类和一个getById方法,如下: class Book { public function getById($id) { return $id; } } 加入缓存技术之后,原来方法的调用方式和返回的数据结构都不应该改变。 所以,我们希望,最后的效果应该是这样的: 1 ( new Book)->getById( 100 ); // 原始的、不用缓存的调用方式,还是原来的方式,一般是读取数据库的数据。 2 ( new Book)->getByIdCache( 100 ); // 使用缓存的调用方式,缓存键名为:app_models_book:getbyid: + md5(参数列表) 3 ( new

亚马逊程序员:我曾拼命逃离996!

瘦欲@ 提交于 2021-01-05 14:40:51
作者 | 佚名 译者 | 刘志勇 策划 | Tina 原文链接: https://sourl.cn/TRq3g3 2019 年,中国程序员抗议 “996” 加班走红网络,呼声传到国外,最终引发全世界的关注,Python 之父曾为此两度发声,声援中国程序员。此起走红事件曾诞生过 996.icu 网站,被国产浏览器集体大棒封杀。本文作者是一名亚马逊员工,一度过着 996 的生活,虽然惧怕大公司的权力,但他把自己的想法,以及调节方式大胆的讲述了出来,很有借鉴意义。 我在亚马逊从事开发,熬到第二年底我就感到精疲力尽了。我不得不寻求改变,找到健康、可持续的方式,维护工作与生活的平衡,并再次享受工作。我写下本文的初衷是: 提高人们的意识,尤其是对新员工; 对亚马逊或其他公司里,有类似经历的员工以帮助和建议。 Hello,World 有关亚马逊的企业文化的轶事、观点和反驳都有不少。我写下本文并非为了跟风蹭热点话题,而是为了分享我的经历。我以为没有人会想听我的故事,但很明显的是,人们正经历着类似的经历,却没有发言权。 我在亚马逊任职软件开发工程师,现在级别为 SDE II;SDE II 基本上是指至少有 2~3 年以上行业经验的软件开发人员。我刚来亚马逊时,是从 SDE I 开始做起的。 对大多数开发人员来说,在五大科技巨头工作并非什么遥不可及的梦想。在通过一个计时的在线编程测试后

漫谈数据仓库之维度建模

喜你入骨 提交于 2021-01-05 14:00:05
点击上方蓝色字关注我们~ 0x00 前言 下面的内容,是笔者在学习和工作中的一些总结,其中概念性的内容大多来自书中,实践性的内容大多来自自己的工作和个人理解。由于资历尚浅,难免会有很多错误,望批评指正! 概述 数据仓库包含的内容很多,它可以包括架构、建模和方法论。对应到具体工作中的话,它可以包含下面的这些内容: 以Hadoop、Spark、Hive等组建为中心的数据架构体系。 各种数据建模方法,如维度建模。 调度系统、元数据系统、ETL系统、可视化系统这类辅助系统。 我们暂且不管数据仓库的范围到底有多大,在数据仓库体系中,数据模型的核心地位是不可替代的。 因此,下面的将详细地阐述数据建模中的典型代表:维度建模,对它的的相关理论以及实际使用做深入的分析。 文章结构 本文将按照下面的顺序进行阐述: 先介绍比较经典和常用的数据仓库模型,并分析其优缺点。 详细介绍维度建模的基本概念以及相关理论。 为了能更真切地理解什么是维度建模,我将模拟一个大家都十分熟悉的电商场景,运用前面讲到的理论进行建模。 理论和现实的工作场景毕竟会有所差距,这一块,我会分享一下企业在实际的应用中所做出的取舍。 0x01 经典数据仓库模型 下面将分别介绍四种数据仓库模型,其中前三种模型分别对应了三本书:《数据仓库》、《数据仓库工具箱》和《数据架构 大数据 数据仓库以及Data Vault》,这三本书都有中文版

面试官:说一下公平锁和非公平锁的区别?

僤鯓⒐⒋嵵緔 提交于 2021-01-05 13:52:48
面试官:说一下公平锁和非公平锁的区别? 前言 上次我们提到了乐观锁和悲观锁,那我们知道锁的类型还有很多种,我们今天简单聊一下,公平锁和非公平锁两口子,以及他们在我们代码中的实践。 正文 开始聊之前,我先大概说一下他们两者的定义,帮大家回顾或者认识一下。 公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。 优点:所有的线程都能得到资源,不会饿死在队列中。 缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。 非公平锁:多个线程去获取锁的时候,会直接去尝试获取,获取不到,再去进入等待队列,如果能获取到,就直接获取到锁。 优点:可以减少CPU唤醒线程的开销,整体的吞吐效率会高点,CPU也不必取唤醒所有线程,会减少唤起线程的数量。 缺点:你们可能也发现了,这样可能导致队列中间的线程一直获取不到锁或者长时间获取不到锁,导致饿死。 我举个例子给他家通俗易懂的讲一下的,想了好几天终于在前天跟三歪去肯德基买早餐排队的时候发现了怎么举例了。 现在是早餐时间,敖丙想去kfc搞个早餐,发现有很多人了,一过去没多想,就乖乖到队尾排队,这样大家都觉得很公平,先到先得,所以这是公平锁咯。 那非公平锁就是,敖丙过去买早餐,发现大家都在排队,但是敖丙这个人有点渣的,就是喜欢插队,那他就直接怼到第一位那去,后面的鸡蛋

排队打饭:公平锁和非公平锁(面试)

↘锁芯ラ 提交于 2021-01-05 12:02:13
简介 有个小伙伴最近咨询我,前段时间他被 面试官 问了 synchronized 是 公平锁还是 非公平锁 ?当时就蒙圈了,最后面试结果可想而知,今天我们就用一个通俗的案例加上代码来说明 公平锁 和 非公平锁 。其实公平锁这个概念是JUC工具包才有的,比如ReentrantLock才有公平锁的概念,这篇文章我们结合生活中的实例用2段代码说明 ReentrantLock 公平锁和非公平锁,以及证明 synchronized是非公平锁的。 希望对小伙伴有帮助。 公平锁、非公平锁概念 公平锁: 举一个简单例子,有五个同学每天必须排队去打饭,为了简单起见,我们给这五名同学每人定义一个编号,分别为 编号001 到 编号005, 这五名同学按 先来后到 的排队,打饭,先来的同学能先打到饭。每个同学都是一个线程,在这个过程中后来的同学是 不允许插队的,这就是公平锁 。 非公平锁:后来到同学不一定后打到饭,在打饭的过程中,是允许插队的,这种线程插入的行为人们认为是不公平的。 举个例子,比如编号为001,002,003,004的同学先到先排队了,005最后来排队本应该排在004后面的,但是005看001正好打完饭离开,他就去插队了,也就是打饭的顺序由001->002->003->004->005变为001->005->002->003->004。其实你现在应该理解了,公平锁就是正常排队

【2020年总结】创业尝试、跳槽涨薪、外包接单、学着理财

为君一笑 提交于 2021-01-05 10:35:04
一、一次简单的创业尝试 2016年底入职的这家公司,2020年6月离开了老东家,在《 离职总结 》一文中详细写了原因,离职后并没有立即找工作,而是自己基于ASR6505开发了LoRa开发板,并且写了相关的详细文档《 从0到1搭建LoRa物联网 》,在这一段时间内,也重新开始画板了,以前用的都是pads,偶然的机会听说了立创eda,想着支持国产,下载了立创eda,基本上从熟悉到使用一天就会了,目前画了四五块板子。 以前的工作主要是负责嵌入式软件部分,这次从原理设计、画板打样、物料采购,样板焊接,开发测试都要一个人干,物料采购不是个容易的事,既要考虑成本,也要考虑性能,经常需要货比三家,这些搞定之后,就是软件开发了,还算比较顺利,最后写开发文档,这一部分比较好费时间的,作为开发往往埋怨没有文档,但是自己又不喜欢写文档,在网友的建议下用typora写的文档,使用typora的同时,也简单学习了markdown,大概耗费了一周的时间。 开通了淘宝商家,缴纳了保证金,ASR6505淘宝上架,刚开始不懂,以为是接到单了,后来才明白过来,是一些打着推广幌子的“骗子”。刚开始发货是给快递员打电话过来收快递,但是这个时间不可控,而且价格也比较贵,偶然发现可以通过丰巢寄快递,价格相对便宜一些,当然寄快递也不受时间限制。 截止目前,发了40多单,虽然不多,但是还是蛮有意义的。 二、找工作

复试安排

雨燕双飞 提交于 2021-01-05 09:56:10
1.刷题顺序 (1)leetcode分类刷题: 数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯->贪心->动态规划->图论->高级数据结构。 ——Carl哥的leetcode刷题指南 https://mp.weixin.qq.com/s/A7N2_ftjhRCQOgulgOE3JQ 。 ——5分钟学算法( 吴师兄公众号 ) (2)PAT刷题:先按《算法笔记》刷一遍(分类刷),并做笔记总结。 (3)往年真题:17-20的往年复试上机题目。 2.复试安排 一、复试的内容、时间地点及方式 复试包括所报考专业的综合知识与技能、外语水平及思想政治品德等内容,同时重视本科阶段学习情况和科研能力。 复试内容包括上机考试和面试。每位考生的面试复试时间一般不少于 20 分钟,其中外语口试约 5 分钟,进行全程录音。 机考的考试时间为 120 分钟,闭卷考试,不能携带任何形式的资料。 考试内容为程序设计、数据结构和算法, 考试环境:Visual Studio 2008 C/C++并有 Java 环境。 ——注意: VS2008是不支持C++11的,但上机的测评系统是支持C++11的;C++11支持的函数有:auto声明、to_string、stoi和stod 。 ——举个栗子:auto,原本set的迭代器需要这样写: for(set<int>::iterator it=s.begin(

那些年,面试官问你的消息队列

∥☆過路亽.° 提交于 2021-01-05 08:23:25
MQ理论介绍 一、为什么需要消息队列(MQ) 主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。大量的请求到达访问数据库,导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection错误,引发雪崩效应。我们使用消息队列,通过异步处理请求,从而缓解系统的压力。核心:异步处理、流量削峰、应用解耦 二、应用场景 异步处理,流量削峰,应用解耦,消息通讯四个场景 2.1、异步处理 场景1:用户注册后,需要发送注册邮件和注册短信。 串行方式:将注册信息写入 数据库 成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端 并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间 假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。 因为CPU在单位时间内处理的请求数是一定的,假设CPU在1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。 并行方式处理的请求量是10次(1000/100) 小结:如以上案例描述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题? 引入消息队列,将不是必须的业务逻辑,异步处理

面试官:不会看 Explain执行计划,简历敢写 SQL 优化?

我们两清 提交于 2021-01-05 07:32:50
转自: 程序员内点事 作者: 程序员内点事 昨天中午在食堂,和部门的技术大牛们坐在一桌吃饭,作为一个卑微技术渣仔默默的吃着饭,听大佬们高谈阔论,研究各种高端技术,我TM也想说话可实在插不上嘴。 聊着聊着突然说到他上午面试了一个工作6年的程序员,表情挺复杂,他说:我看他简历写着熟悉 SQL 语句调优,就问了下 Explain 执行计划怎么看?结果这老哥一问三不知,工作6年这么基础的东西都不了解! 感受到了大佬的王之鄙视,回到工位我就开始默默写这个,哎~ 我TM也不太懂 Explain ,老哥你这是针对我啊!哭唧唧~ Explain有什么用 当 Explain 与 SQL 语句一起使用时, MySQL 会显示来自优化器关于SQL执行的信息。也就是说, MySQL 解释了它将如何处理该语句,包括如何连接表以及什么顺序连接表等。 表的加载顺序 sql 的查询类型 可能用到哪些索引,哪些索引又被实际使用 表与表之间的引用关系 一个表中有多少行被优化器查询 ..... Explain有哪些信息 Explain 执行计划包含字段信息如下:分别是 id 、 select_type 、 table 、 partitions 、 type 、 possible_keys 、 key 、 key_len 、 ref 、 rows 、 filtered 、 Extra 12个字段。 下边我们会结合具体的

PyCharm2020年最新永久激活锦囊

ⅰ亾dé卋堺 提交于 2021-01-05 05:30:38
—————— · 今天距2021年 341 天 · —————— 这是ITester软件测试小栈第 99 次推文 大家好 我是vivi小胖虎 今天分享 最 最 最 新版本的 PyCharm的 激活 方法 PyCharm 有专业版和社区版 社区版功能没收费版强大 但也能满足一般使用 vivi小胖虎使用的是专业版 花钱是不可能的 这辈子都不可能 为什么要用破解的专业版呢? 专业版 是收费的,只能试用 一个月 。 网上有破解教程,只要用于学习或科研用途,是可以进行破解滴。 社区版 适合个人或小团队开发使用,完全是够的,一些功能没法使用(比如Web开发,Python Web框架,Python的探查,远程开发能力,数据库和SQL支持)。 付费版 第一年199美元,第二年159美元,第三年119美元......就是不会免费。 安装包准备 准备工具: PyCharm安装包,补丁jar包 。 pycharm安装包&补丁jar包下载:微信公众号后台回复 pycharm 一 下载安装PyCharm 切记:使 用百度网盘里下载的2019.3.1PyCharm版本 ,其他的版本不能保证一定能激活。 选择安装路径: 勾选设置: 之后,下一步,下一步...默认安装就行了, 安装完先不用启动pycharm。 二 PyCharm永久激活 1.将下载的jetbrains-agent.jar破解补丁,放到