戴国进
往后余生,专注人工智能领域!!!
展开
-
面试官问:一张数据量很大的表,分页查询特别耗时,你有什么优化方案?
像标题那样的问题,你一般都是如何去做查询呢?下面来看看,实际开发中我们会遇到,面试的时候也是会被问到的问题。在开发过程中我们经常会使用分页,核心技术是使用limit进行数据的读取,在使用limit进行分页的测试过程中,得到以下数据:select*fromnewsorderbyiddesclimit0,10耗时0.003秒select*fromnewsorderbyiddesclimit10000,10耗时0.058秒select*fromnews...转载 2022-04-27 20:59:24 · 2398 阅读 · 0 评论 -
分布式事务的 6 种解决方案
介绍在分布式系统、微服务架构大行其道的今天,服务间互相调用出现失败已经成为常态。如何处理异常,如何保证数据一致性,成为微服务设计过程中,绕不开的一个难题。在不同的业务场景下,解决方案会有所差异,常见的方式有: 阻塞式重试; 2PC、3PC 传统事务; 使用队列,后台异步处理; TCC 补偿事务; 本地消息表(异步确保); MQ 事务。 本文侧重于其他几项,关于 2PC、3PC 传统事务,网上资料已经非常多了,这里不多做重复。阻塞式重试在原创 2021-11-03 10:26:49 · 455 阅读 · 0 评论 -
100道MySQL数据库经典面试题解析(有空必看)
1. MySQL 索引使用有哪些注意事项呢?可以从三个维度回答这个问题:索引哪些情况会失效,索引不适合哪些场景,索引规则索引哪些情况会失效查询条件包含or,可能导致索引失效 如何字段类型是字符串,where时一定用引号括起来,否则索引失效 like通配符可能导致索引失效。 联合索引,查询时的条件列不是联合索引中的第一个列,索引失效。 在索引列上使用mysql的内置函数,索引失效。 对索引列运算(如,+、-、*、/),索引失效。 索引字段上使用(!= 或者 < >,not转载 2021-02-28 23:41:04 · 5718 阅读 · 0 评论 -
GET和POST两种基本请求方法的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻轻松松的给出了一个“标准答案”: GET在浏览器回退时是无害的,而POST会再次提交请求。 ...转载 2021-02-01 15:09:05 · 2864 阅读 · 0 评论 -
Redis常见面试题
介绍:Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式而分布式一般遵循 CAP 定理。Github 源码:https://github.com/antirez/redisRedis 官网:https://redis.原创 2020-10-24 11:34:56 · 8889 阅读 · 3 评论 -
大厂必考 - mysql锁机制及原理
参考https://dev.mysql.com/doc/internals/en/innodb.html 《MySQL技术内幕:InnoDB存储引擎(第2版)》 https://juejin.im/post/6844903974282362887 mysql锁机制及原理—锁的诠释锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问,并确保数据的完整性和一致性,实现事务的隔离性要求。MySQL、Microsoft SQL Se...原创 2020-10-21 14:11:18 · 9917 阅读 · 1 评论 -
Redis的五大数据类型的底层实现
1、简介Redis的五大数据类型也称五大数据对象;前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject;这个对象系统包含了五大数据对象,字符串对象(string)、列表对象(list)、哈希对象(hash)、集合(set)对象和有序集合对象(zset);而这五大对象的底层数据编码可以用命令OBJECT ENCODING来进行查看。redisObject结构1 typedef struct redisObjec.原创 2020-10-20 20:19:11 · 5344 阅读 · 0 评论 -
Mysql redo、undo、bin、relay log 区别
redo log 和 undo logundo log:为了实现事务原子性,要么全部完成commit,要么全部回滚rollback,Innodb用于实现mvcc(多版本并发控制) 例如:将user=’A’ 改为 user=’B’,则undo log中会记录下user=’A’和事务版本等信息 一旦事务完成,所有修改必须被记录下,保证数据一致性(后面redo log解释)redo log:如果使用undo log作为持久化数据,意味着修改数据和undo log必须同时写入磁盘持久化,这必定带来转载 2020-10-20 20:04:29 · 5152 阅读 · 0 评论 -
30道2020年腾讯PHP面试题整理(附带答案)
一、PHP开发部分1.合并两个数组有几种方式,试比较它们的异同答:1)array_merge()2)’+’3)array_merge_recursivearray_merge 简单的合并数组array_merge_recursive 合并两个数组,如果数组中有完全一样的数据,将它们递归合并array_combine 和 ‘+’ :合并两个数组,前者的值作为新数组的键2.请写一个函数来检查用户提交的数据是否为整数(不区分数据类型,可以为二进制、八进制、十进制、十六进制数字)原创 2020-10-19 00:30:08 · 7132 阅读 · 1 评论 -
2020最新腾讯PHP试题(附答案及解析)
一、单选题(共29题,每题5分)1.PHP执行的时候有如下执行过程:Scanning(Lexing) - Compilation - Execution - Parsing,其含义分别为:A、将PHP代码转换为语言片段(Tokens)、将Tokens转换成简单而有意义的表达式、顺次执行Opcodes、将表达式编译成OpocdesB、将PHP代码转换为语言片段(Tokens)、将表达式编译成Opocdes、顺次执行Opcodes、将Tokens转换成简单而有意义的表达式C、将PHP代码转换为语原创 2020-10-23 11:32:51 · 27670 阅读 · 3 评论 -
php 魔术常量、魔术函数 和 $_SERVER变量
魔术常量 __FILE__ $_SERVER['SCRIPT_FILENAME'] 反映的是当前执行程序的绝对路径及文件名;__FILE__ 反映的是原始文件(被包含文件)的绝对路径及文件名。__LINE____CLASS____FUNCTION____METHOD__ 魔术函数 __autoLoad( )__clone( )__ toString( )__GET( )__SET( )__CAL...原创 2020-08-02 11:41:06 · 8215 阅读 · 0 评论 -
MySQL 一次查询请求的执行流程
MySQL的流程分析1.连接 1.1客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求 1.2将请求转发到‘连接进/线程模块’ 1.3调用‘用户模块’来进行授权检查 1.4通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求2.处理 2.1先查询缓存,检查Query语句是否完全匹配,接着再检查是否具有权限,都成功则直接取数据返回 2.2上一步有失败则转交给‘命令解析器’..原创 2020-10-15 09:37:13 · 5819 阅读 · 0 评论 -
大厂必考 - MySQL索引
言简意赅,MySQL 索引的重要性不言而喻。MySQL 索引历经了多个版本的迭代,从语法到底层数据结构都有很多改变。MySQL 索引,我们真的了解么?好了,今天我们一起来看看 MySQL 索引的前世今生,一起聊聊索引的那些事儿。什么是索引?在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所...原创 2020-10-14 16:47:57 · 5592 阅读 · 0 评论 -
yii2运行流程及与laravel框架比较
一、yii2框架与laravel框架的比较1.开发速度:两者差不多,yii2有gii脚手架,laravel有artisan2.代码可读性:yii2代码可读性比laravel好得多3.开源生态圈:laravel社区比yii2社区活跃,第三方工具多二、yii2运行流程如下:1、用户向入口脚本 web/index.php 发起请求。2、入口脚本加载应用配置并创建一个应用 实例去处理请求。3、应用通过请求组件解析请求的 路由。4、应用创建一个控制器实例去处理请求。5...原创 2020-10-11 17:48:02 · 6100 阅读 · 0 评论 -
redis缓存雪崩,缓存穿透,缓存击穿的php解决方法
一、缓存雪崩缓存雪崩表示在某一时间段,缓存集中失效,导致请求全部走数据库,有可能搞垮数据库,使整个服务瘫痪。使缓存集中失效的原因:1、redis服务器挂掉了。2、对缓存数据设置了相同的过期时间,导致某时间段内缓存集中失效。如何解决缓存集中失效:1、针对原因1,可以实现redis的高可用,Redis Cluster 或者 Redis Sentinel(哨兵) 等方案。2、针对原因2,设置缓存过期时间时加上一个随机值,避免缓存在同一时间过期。<?php $redis转载 2020-06-09 19:43:46 · 9369 阅读 · 0 评论 -
RabbitMQ和kafka的区别
一、语言不同RabbitMQ是由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上。kafka是采用Scala语言开发,它主要用于处理活跃的流式数据,大数据量的数据处理上二、结构不同RabbitMQ采用AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议RabbitMQ的broker由Exchange,Binding,queue组成kafka采用mq结构:broker 有pa.原创 2020-09-11 16:30:28 · 11348 阅读 · 0 评论 -
Mysql8 和mysql 5.7 的区别
1. NoSql存储Mysql从5.7 版本提供了NoSQL的存储功能,在8.0中这部分得到一些修改,不过这个在实际中用的极少2.隐藏索引隐藏索引的特性对于性能调试非常有用,在8.0 中,索引可以被隐藏和显示,当一个索引隐藏时,他不会被查询优化器所使用也就是说可以隐藏一个索引,然后观察对数据库的影响.如果性能下降,就说明这个索引是有效的,于是将其”恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多于的,可以删掉了隐藏一个索引的语法ALTER TABLE t ALTER IND原创 2020-09-10 15:00:10 · 12329 阅读 · 1 评论 -
前端面试考察内容
[上午10:45] 王军#前端面试考察内容1、你在前端领域,你最核心的竞争力是什么?为什么认为它是你在前端领域最核心的竞争力?你这个核心竞争力,别人替代你的成本高不高?2、聊聊你的前端技术栈,尽量详细一些。在这些技术栈中,有没有去研究它们的源码?去弄清楚它们的实现原理?以及它们的优势与缺陷?想过没有,如何去优化它们的缺陷?3、简述一下浏览器的核心工作机制,一个Web网页,在浏览器中的生命周期是什么?都经历过哪些流程?4、谈谈你对进程、线程、协程的理解?有没有写过多线程的程序片段?何时挂.原创 2020-08-07 11:25:47 · 9004 阅读 · 0 评论 -
PHP高频面试题 - 详述一次完整的HTTP请求过程
这个问题的核心是域名解析和服务器(nginx)解析这两部分,基本上这两部分详细阐述就可以了。步骤一、解析URL浏览器会解析当前的URL数据,判断此URL是否为合法的链接。如果是合法链接则正常的向下一步骤前进。如果不是合法的链接,则会执行搜索功能,例如执行百度、360、Google搜索等。步骤二、解析域名服务器是以ip的形式存在的。而域名需要解析到ip上,解析IP会有三个小的步骤:1、从浏览器自身的缓存中解析此域名数据2、从本地电脑的HOST文件中解析域名3、通过DNS服务器解析域原创 2020-07-10 14:46:43 · 9725 阅读 · 0 评论 -
MongoDB和MySQL的区别
前言:MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库。它们各有各的优点,关键是看用在什么地方。所以我们所熟知的那些SQL语句就不适用于MongoDB了,因为SQL语句是关系型数据库的标准语言。一、关系型数据库-MySQL1、在不同的引擎上有不同的存储方式。2、查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。3、开源数据库的份额在不断增加,mysql的份额页在持续增原创 2020-07-08 21:39:35 · 9916 阅读 · 0 评论 -
详细讲解面向对象设计的六大原则
前言其实,六大原则虽说是原则,但它们并不是强制性的,更多的是建议。遵照这些原则固然能帮助我们更好的规范我们的系统设计和代码习惯,但并不是所有的场景都适用,就例如接口隔离原则,在现实系统开发中,我们很难完全遵守一个模块一个接口的设计,否则业务多了就会出现代码设计过度的情况,让整个系统变得过于庞大,增加了系统的复杂度,甚至影响自己的项目进度,得不偿失啊。所以,还是那句话,在合适的场景选择合适的技术!六大原则言归正传,这是我学习设计模式系列的第一篇文章,本文主要讲的是面向对象设计应该遵循的六.原创 2020-07-08 21:13:57 · 9167 阅读 · 0 评论 -
HTTPS原理详解
原创 2020-07-05 18:33:24 · 8897 阅读 · 0 评论 -
美图网 2018年高级PHP笔试题
1、写一段代码,实现PHP内部的通知机制,如当一个类的属性发生变化时,另外一个类就可以收到通知。<?php/*** 观察者模式* @author: Mac* @date: 2012/02/22*/class Paper{ /* 主题 */private $_observers = array();public function register($sub){ /* 注册观察者 */$this->_observers[] = $sub;}public原创 2020-07-05 17:22:22 · 8870 阅读 · 0 评论 -
PHP实现四种基本排序算法
前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。$arr(1,43,54,62,21,66,32,78,36,76,39);1. 冒泡排序思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。代码实现:<?php$arr=array(1,43,54,62,21,66,32,78,.原创 2020-07-05 17:13:45 · 8846 阅读 · 0 评论 -
网络状态码含义,常用(204,304, 404, 504,502)
1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。代码 说明http状态码 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。http状态码 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。2xx (成功)表示成功处理了请求的状态代码。代码 说明http状态码 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。http状态码...原创 2020-07-05 16:57:22 · 16812 阅读 · 0 评论 -
八个PHP 高级工程师经典面试题
1.PHP 如何实现不用自带的 cookie 函数为客户端下发 cookie。对于分布式系统,如何来保存 session 值。这个题有点绕。考的还是 COOKIE 和 SESSION 的基础知识。服务端通过 set-cookie 命令来通知客户端保存 cookie。只要按照 domain path 过期时间等规则 用 header 函数就可以实现。分布式系统 session,集中处理。按我们公司的架构,为了实现高可用和高容灾,提供一个分布式的验签服务。具体的可以看下 redis 的分布式服务架构转载 2020-06-30 21:10:18 · 9522 阅读 · 0 评论 -
PHP 执行流程
一.数据库三范式第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。范式化设计优缺点:优点:可以尽量得减少数据冗余,使得更新快,体积小缺点:对于查询需要多个表进行关联,减少写得效率增加读得效率,更难进行索引优化反范式化:优点:可以减少表得关联,可以更好得进行索引优化缺点:数据冗余以及数据原创 2020-06-30 21:06:32 · 10338 阅读 · 0 评论 -
2019年腾讯PHP程序员面试题目
1. php 的垃圾回收机制PHP 可以自动进行内存管理,清除不需要的对象。PHP 使用了引用计数 (reference counting) GC 机制。每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,计数器加 1。当 reference 离开生存空间或被设为 NULL,计数器减 1。当某个对象的引用计数器为零时,PHP 知道你将不再需要使用这个对象,释放其所占的内存空间。2. session 与 cookie 的区别和联系区别:1. 存放位置:转载 2020-06-09 20:05:41 · 8640 阅读 · 0 评论