一、http/https协议,tcp/ip协议,websocket,session,cookie

二、php:oop,thinkphp5,laravel

三、mysql、memcache、redis

3.1  mysql面试题目

3.1.1 MySQL的复制原理以及流程

3.1.2 char和varchar的区别?

* char用于存放固定长度的字符串,长度最大为255,比指定长度大的值将被截断,而比指定长度小的值将会用空格进行填补。

* varchar用于保存可变长度的字符串,长度最大为65535,只存储字符串实际需要的长度,它会增加一个额外字节来保存字符串本身的长度,varchar使用额外的1~2字节来存储值的长度。如果列的最大长度小于或等于255,则使用1字节,否则使用2字节。

* char和varchar跟字符编码也有密切联系,lantin1占用1个字节,gbk占用2个字节,utf8占用3个字节。

3.1.3 mysql慢查询日志

* Mysql的慢查询日志,顾名思义就是把执行时间超过设定值(默认10s)的SQL记录到日志中。这项功能需要手动开启,但是开启后会造成一定的性能损耗。

* 查看是否开启:show variables like ‘%slow_query_log%’;

* 开启慢查询:set global slow_query_log=1;

* my.cnf设置:

slow_query_log=1

long_query_time=10

slow_query_file=/path/mysql_slow.log

* log_outpout:

指定日志的存储方式。log_output=’FILE’标识日志存入文件,默认值是‘FILE’。log_output=’TABLE’表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。

数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=’FILE,TABLE’。

日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能获得更高的系统性能,建议优先记录到文件。

* log-query-not-using-indexes:

未使用索引的查询也被记录到慢查询日志中(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使用full index scan的sql也会被记录到慢查询日志。

* log_slow_admin_statements:

表示是否将慢管理语句例如ANALYZE TABLE和ALTER TABLE等记录慢查询日志。

* 分析工具mysqldumpslow  -- 慢查询分析工具

3.1.4 索引的类型

* 主键索引,主键自动的为主索引(类型Primary)

* 唯一索引(UNIQUE)

* 全文索引(FULLTEXT)(只在MyISAM存储引擎支持,在内容系统中用的多,在全英文网站用的多。中文数据不常用,意义不大,国内全文索引通常使用sphinx来完成,全文索引只能在char、varchar、text字段创建)

* 综合使用 => 复合索引

3.1.5 锁

https://www.cnblogs.com/chenqionghe/p/4845693.html

锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,出传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

概述

相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。MySQL大致可归纳为以下3种锁:

* 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

* 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

* 页面锁:开销和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发粒度一般。

Mysql表级锁的锁模式(MyISAM),有两种:表共享锁(读锁,Table Read Lock)和表独占写锁(Table Write Lock)。

* 对MyISAM的读操作,不会阻塞其他用户对同一表请求,但会阻塞对同一表的写请求;

* 对MyISAM的写操作,则会阻塞其他用户对同一表的读和写操作;

* MyISAM表的读操作和写操作之间,以及写操作之间都是串行的。

当一个线程获得对一个表的写锁后,只有持有锁线程可以对表进行更新操作。其他线程的读、写操作都会等待,直到锁被释放为止。

MySQL中的表锁兼容性

当前锁模式/是否兼容/请求锁模式

None

读锁

写锁

读锁

写锁

可见,对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;

对MyISAM表的写操作,则会阻塞其他用户对同一表的读和写请求;

MyISAM表的读和写操作之间,以及写和写操作之间是串行的。

MyISAM表不会出现死锁的原因?

不管是显式加锁还是自动加锁,mysql会一次获得SQL语句所需要的全部锁。

一个session使用LOCK TABLE命令给表film_text加了读锁,这个session可以查询锁定表中的记录,但更新或访问其他表都会提示错误;

同时,另外一个session可以查询表中的记录,但更新就会出现锁等待。

当使用LOCK TABLE时,不仅需要一次锁定用到的所有表,而且,同一个表在SQL语句中出现多少次,就要通过与SQL语句中相同的别名锁多少次,否则也会出错。

如何加表锁?

MyISAM在执行查询语句(select)前,会自动给涉及的所有表加读锁,在执行更新操作(update、delete、insert等)前,会自动给涉及的表加写锁,这个过程并不需要用于干预,因此用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁。

并发锁

在一定条件下,MyISAM也支持查询和操作的并发进行。

MyISAM存储引擎有一个系统变量current_insert,专门用以控制其并发插入的行为,其值分别为0/1/2。

* 当concurrent_insert设置为0时,无论MyISAM的表数据文件中间是否存在因为删除而留下的空闲空间,不允许并发插入;

* 当concurrent_insert设置为1时,如果MyISAM允许在一个读表的同时,另一个进程从表尾插入记录。这也是MySQL的默认配置。

* 当concurrent_insert设置为2时,无论MyISAM表中有没有空闲空间,都允许在数据文件尾部并发插入记录。

可以利用MyISAM存储引擎的并发插入特性,来解决应用中对同一表查询和插入锁争用。例如,将concurrent_insert系统变量为2,总是允许并发插入;同时,通过定期在系统空闲时段执行OPTIONMIZE TABLE语句来整理空闲碎片,收到因删除记录而产生的中间空间。

MyISAM的锁调度

前面讲过,MyISAM存储引擎的读和写锁是互斥的,读操作是串行的。那么,一个进程请求某个MyISAM表的读锁,同时另一个进程也请求同一表的写锁,MySQL如何处理?

答案是写进程先获得锁。不仅如此,即使读进程先请求到锁等待队列,写请求后到,写锁也会插入到读请求之前!这事因为MySQL认为写请求一般比读请求重要。这也正式MyISAM表不太适合于有大量更新操作和查询操作应用的原因。因为,大量的更新操作会造成查询操作很难获得读锁,从而可能用于阻塞。这种情况有时可能会变得非常糟糕!幸好我们可以通过一些设置来调节MyISAM的调度行为。

* 通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利。

* 通过执行命令SET LOW_PRIORITY_UPDATE=1,使该连接发出的更新请求优先级降低。

* 通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级。

虽然上面3中方法都是要么更新优先,要么查询优先的方法,但是还是可以用其来解决查询相对重要的应用(如用户登录系统)中,读锁等待严重的问题。

另外,MySQL也提供了一种折中的办法来调节读写冲突。即给系统参数max_write_lock_count设置一个合适的值,当一个表的读锁达到这个值后,mysql便暂时将写请求的优先级降低,给读进程一定获得锁的机会。

3.1.6 Sphinx(斯芬克司,全文检索引擎)

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP、Python、Perl、Ruby等,同时为MySQL也设计了一个存储引擎插件。

Sphinx单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需要几十秒。

Sphinx的主要特性包括:

高速索引(在新款CPU上,近10MB/秒);

高速搜索(2-4G的文本量中平均查询速度不到0.1秒);

高可用性(单CPU上最大支持100GB的文本,100M文档);

提供良好的相关性排名,支持分布式搜索;

提供文档摘要生成;

提供从MySQL内部的插件式存储引擎上搜索,支持布尔、短语、和近义词查询;

支持每个文档多个全文检索域(默认最大32个);

支持每个文档多属性;

支持断词;

支持单字节编码与UTF-8编码。

3.1.7

3.1.8

3.1.9

3.1.10

四、apache、nginx

五、shell脚本,常用linux服务器维护命令

PHP工程师必备知识整理的更多相关文章

  1. MySQL常用指令,java,php程序员,数据库工程师必备。程序员小冰常用资料整理

    MySQL常用指令,java,php程序员,数据库工程师必备.程序员小冰常用资料整理 MySQL常用指令(备查) 最常用的显示命令: 1.显示数据库列表. show databases; 2.显示库中 ...

  2. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  3. 数据库知识整理<一>

    关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...

  4. 【转载】UML类图知识整理

    原文:UML类图知识整理 UML类图 UML,进阶必备专业技能,看不懂UML就会看不懂那些优秀的资料. 这里简单整理 类之间的关系 泛化关系(generalization) 泛化(generalize ...

  5. Java面试必备知识

    JAVA面试必备知识 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可 ...

  6. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  7. Salesforce知识整理(一)之Lightning Web Component Tools

    目录 LWC知识整理(一) 工具 Salesforce CLI Visual Studio Code(VS Code) Developer Hub(Dev Hub) 开启Dev Hub 相关资料 茶余 ...

  8. Java工程师必备

    Java工程师必备 JAVA基础扎实,熟悉JVM,熟悉网络.多线程.分布式编程及性能调优 精通Java EE相关技术 熟练运用Spring/SpringBoot/MyBatis等基础框架 熟悉分布式系 ...

  9. [面试]中高级测试工程师必备,月薪15K+

    1.你的测试职业发展是什么? 测试经验越多,测试能力越高.所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去.而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求 ...

随机推荐

  1. FreeSwitch 终端命令详细介绍

    FreeSwitch版本:1.6.9 以下为部分终端命令 alias 语法: alias [add|stickyadd] <alias> <command> | del [&l ...

  2. js中把ajax获取的数据转化成树状结构(并做成多级联动效果)

    1.首先通过ajax获取数据,此处省略,直接贴出获取到的数据格式 var arr = [{ id: 1, name: "一级标题", pid: 0 }, { id: 2, name ...

  3. 做一个有产品思维的研发:部署(Tomcat配置,Nginx配置,JDK配置)

    每天10分钟,解决一个研发问题. 如果你想了解我在做什么,请看<做一个有产品思维的研发:课程大纲>传送门:https://www.cnblogs.com/hunttown/p/104909 ...

  4. (转载)js日期格式化转化

    原文地址:http://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.html // 对Date的扩展,将 Date 转化为指定格式 ...

  5. Check SQL Server Deadlock

    Sometimes a script keeps running for a long time and can't stop, then a db blocking is occurring. We ...

  6. aos.css 动画效果

    aos网址 https://codepen.io/michalsnik/pen/WxNdvq <div class="item" data-aos="fade-up ...

  7. 微信中H5网页如何唤醒打开外部浏览器打开指定链接

    最近遇到一个需求.朋友找我制作一个在微信中的聊天框,或者公众号菜单发布一条链接或者二维码.跳出微信打开一个指定的我们自己的页面, 拿到这个需求后我们团队分开去找资料研究方案,通过微信的开发文档.腾讯的 ...

  8. 【论文速读】Yuliang Liu_2017_Detecting Curve Text in the Wild_New Dataset and New Solution

    Yuliang Liu_2017_Detecting Curve Text in the Wild_New Dataset and New Solution 作者和代码 caffe版代码 关键词 文字 ...

  9. Tengine 安装和说明

    使用tengine要安装nginx.架构为:LTNMT或LTNMP 1. 官网下载源码包 [root@qc_centos7_5 src]# wget http://tengine.taobao.org ...

  10. 2019MABU3月班——SAP导入总账科目小笔记

    1. 在目录中找到“集中” 2.总账科目这里输入代码,公司代码为3000 3. 点“创建” 4. 然后可以填下面这些了 5. 转到“创建/银行/利息” 6. 选字段状态组 7. 保存 8.大功告成.