面试问题总结二(技术能力-PHP)----Ⅳ

5七、Linux 的基本命令(重点,如今多数服务器都是Linux 系统)php

答:arch 显示机器的处理器架构html

uname -m 显示机器的处理器架构前端

uname -r 显示正在使用的内核版本vue

dmidecode -q 显示硬件系统部件node

- (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性mysql

hdparm -tT /dev/sda 在磁盘上执行测试性读取操做web

cat /porc/cpuinfo 显示 CPU info 的信息redis

cat /porc/interrupts 显示中断算法

cat /porc/meminfo 校验内存使用sql

cat /porc/swaps 显示哪些 swap 被使用

cat /porc/verion 显示内核的版本

cat /porc/net/dev 显示网络适配器及统计

cat /porc/mounts 显示已加载的文件系统

date 显示系统日期

cal 2007 显示 2007 年的日历表

date 061212352018.00 设置日期和时间 -月日时分年.秒

clock -w 将时间修改保存到 BIOS

文件搜索:

find / -name file1 从 '/'开始进入根文件系统搜索文件和目录

locate *.ps 寻找以 '.ps'结尾的文件-先运行'updatedb'命令

whereis halt 显示一个二进制文件、源码或 man 的位置

which halt 显示一个二进制文件或可执行文件的完整路径

挂载一个文件系统:

mount /dev/hda2 /mnt/hda2 挂载一个叫作 hda2 的盘- 肯定目录'/ mnt/hda2' 已经存在

umount /dev/hda2 卸载一个叫作 hda2 的盘- 先从挂载点'/ mnt/hda2' 退出

追加命令:

一、sudo cat /etc/aaa >>/usr/bbb        把文件/etc/aaa 中的内容追加到/usr/bbb 中的内容的后面         

二、sudo chmod apache:apache /etc/index.html        更改/etc/index.html 的文件全部者为 apache,文件群组为 apache         

三、sudo chmod 744 /etc/index.html4        更改/etc/index.html 的全部者权限为读取、写入、执行。群组权限为读取。其余权限为读取

sudo rm /etc/index.html        删除/etc 下名为 hello 的文件 

固然,若是你是以 orot 用户执行以上操做,能够去掉前边的 sudo

df -hl     查看磁盘剩余空间

df -h     查看每一个根路径的分区大小

du -sh [目录名]     返回该目录的大小

du -sm [文件夹]     返回该文件夹总 M 数

shutdown -h now    关机 (系统的关机、重启以及登出) 

关闭系统

init 0 关闭系统

telinit 0 关闭系统

shutdown -h hour:minutes & 按预约时间关闭系统

shutdown -c 取消按预约时间关闭系统

shutdown -r now    重启

reboot 重启

logout    注销文件和目录

pwd     显示工做路径

ls      查看目录中的文件

ls -F     查看目录中的文件

ls -l     显示文件和目录的详细资料

ls -a     显示隐藏文件

ls *[0-9]*     显示包含数字的文件名和目录名

tree [文件夹]       显示文件和目录由根目录开始的树形结构

lstree  [文件夹]       显示文件和目录由根目录开始的树形结构

mkdir dir1    建立一个叫作 'dir1'的目录' 磁盘空间

df -h     显示已经挂载的分区列表

ls -lSr |more 以尺寸大小排列文件和目录

du -sh dir1 估算目录 'dir1'已经使用的磁盘空间'

下载、解压

一、对于.tar 结尾的文件   tar -xf all.tar

二、对于.gz 结尾的文件   gzip -d all.gz   

gunzip all.gz

# zip all.zip *.jpg   这条命令是将全部.jpg 的文件压缩成一个 zip 包

# unzip all.zip   这条命令是将 all.zip 中的全部文件解压出来下载命令

wget + 空格 +要下载文件的 url 路径=====================================

 

Shell 脚本:必须以 #!/bin/sh 开头简单例子:判断这个目录下有没有文件(File)    

#!/bin/bash

Num=`ls -al /opt |grep "^-"|wc -l `

if [ $Num != 0 ] 

then echo "/opt has $Num files" 

else echo "/opt has none file"

 

 

fils -al /opt |grep "^-"|wc -l     这个命令可以统计文件个数 为 0 就是没有文件 非零就是有文件

 

5八、memache 通常用来缓存什么数据?

答:一、常常被读取而且实时性要求不强能够等到自动过时的数据。例如网站首页最新文章列表、某某排行等数据。

二、常常被读取而且实时性要求不强的数据。好比用户的好友列表,用户文章列表,用户阅读记录等。

三、统计类缓存,好比文章浏览数、网站 PV 等。

四、活跃用户的基本信息或者某篇热门文章。

五、session 数据

 

5九、魔术方法和魔术常量

答:魔术方法:

一、__construct() 实例化对象时被调用,当 __construct 和以类名为函数名的函数同时存在时,__construct 将被调用,另外一个不被调用。

二、__destruct() 当删除一个对象或对象操做终止时被调用。

三、__call() 对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用 __call 函数。

四、__get() 读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用 __get 函数。__get()方法有一个参数,表示要调用的变量名

五、__set() 设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用 __set 函数。__set()方法包含两个参数,分别表示变量名称和变量值,两个参数都不可省略

六、__toString() 打印一个对象的时被调用。如 echo obj;或 printobj;

七、__clone() 克隆对象时被调用。如:t=newTest();t1=clone $t;

八、__sleep() serialize 以前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。

九、__wakeup() unserialize 时被调用,作些对象的初始化工做。

十、__isset() 检测一个对象的属性是否存在时被调用。如:isset($c->name)。十一、__unset() unset销毁指定的变量时被调用。如:unset($c->name)。

十二、__set_state() 调用 var_export 时,被调用。用 __set_state 的返回值作为 var_export 的返回值。

var_export ( mixed $expression [,bool $return ] )此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 相似,不一样的是其返回的表示是合法的 PHP 代码。第二个参数设置为 TRUE,从而返回变量的表示。

1三、__autoload()实例化一个对象时,若是对应的类不存在,则该方法被调用。

 

魔术常量:

一、__LINE__ 返回文件中的当前行号。

二、__FILE__ 返回文件的完整路径和文件名。若是用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 老是包含一个绝对路径,而在此以前的版本有时会包含一个相对路径。

三、__FUNCTION__ 返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值老是小写字母的。

四、__CLASS__ 返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值老是小写字母的。

五、__METHOD__ 返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

六、__DIR__ 当前文件的目录

 

60、接口 interface 和抽象类 abstract class 的区别?

答:抽象类是一种不能被实例化的类,只能做为其余类的父类来使用。抽象类是经过关键字 abstract 来声明的。抽象类与普通类类似,都包含成员变量和成员方法,二者的区别在于,抽象类中至少要包含一个抽象方法,抽象方法没有方法体,该方法天生就是要被子类重写的。抽象方法的格式为:abstract function abstractMethod();

接口是经过 interface 关键字来声明的,接口中的成员常量和方法都是 public 的,方法能够不写关键字 public,接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。抽象类和接口实现的功能十分类似,最大的不一样是接口能实现多继承。在应用中选择抽象类仍是接口要看具体实现。子类继承抽象类使用 extends,子类实现接口使用 implements。

接口是一种特殊化的抽象类

 

6一、什么是队列?排它锁,Myisam 死锁如何解决?

答:在默认状况下 MyIsam表级锁,因此同时操做单张表的多个动做只能以队列的方式进行。

排它锁又名写锁,在 SQL 执行过程当中为排除其它请求而写锁,在执行完毕后会自动释放。

死锁解决:先找到死锁的线程号(从数据字典里面分析,mysql> SELECT * FROM information_schema.INNODB_TRX\G),而后杀掉线程 ID(kill 线程ID)。

6二、Myisam 与 Innodb 的区别?

Innodb引擎

Innodb引擎提供了对数据库ACID事务的支持,而且实现了SQL标准的四种隔离级别。 该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它自己其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中创建缓冲池,用于缓冲数据和索引。 可是该引擎不支持FULLTEXT类型的索引(全文索引),并且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时须要扫描全表。 当须要使用数据库事务时,该引擎固然是首选。因为锁的粒度更小,写操做不会锁定全表,因此在并发较高时,使用Innodb引擎会提高效率。 可是使用行级锁也不是绝对的,若是在执行一个SQL语句时MySQL不能肯定要扫描的范围,InnoDB表一样会锁全表。

MyIASM引擎

MyIASM是MySQL默认的引擎,可是它没有提供对数据库事务的支持,也不支持行级锁和外键,所以当INSERT(插入)或UPDATE(更新)数据时即写操做须要锁定整个表,效率便会低一些。 不过和Innodb不一样,MyIASM中存储了表的行数,因而SELECT COUNT(*) FROM TABLE 时只须要直接读取已经保存好的值而不须要进行全表扫描。 若是表的读操做远远多于写操做且不须要数据库事务的支持,那么MyIASM也是很好的选择

主要区别:

一、MyIASM是非事务安全的,而InnoDB是事务安全的

二、MyIASM锁的粒度是表级的,而InnoDB支持行级锁

三、MyIASM支持全文类型索引,而InnoDB不支持全文索引(5.6.24之后支持)、

四、MyIASM相对简单,效率上要优于InnoDB,小型应用能够考虑使用MyIASM

五、MyIASM表保存成文件形式,跨平台使用更加方便

六、MyIASM不支持外键约束,而InnoDB 支持外键约束(可实现表的联动操做,一删多删)

应用场景:

一、MyIASM管理非事务表,提供高速存储和检索以及全文搜索能力,若是再应用中执行大量select操做,应该选择MyIASM

二、InnoDB用于事务处理,具备ACID事务支持等特性,若是在应用中执行大量insert和update操做,应该选择InnoDB

 

6三、bootstrap 框架有哪些优势?

答:bootstrap 是一款 web 开发框架,它由 CSS,JavaScript,Html,三部分构成,它简洁灵活,使得 web 开发更加的快捷

优势:

①节省时间: 使用 bootstrap 框架,能够大大的节省项目开发时间,它包含了不少现成的代码,若是须要使用,只须要找到合适的代码,插入合适的位置便可,此外,CSS 是使用 LESS 编写,不少样式和设计都已经设计完成了

②定制化: bootstrap 能够根据本身的项目,留取框架中本身须要的部分

③设计合理:

  •  栅格系统: bootstrap 定义 12 格栅系统,在页面已经完成时,你能够根据合适的网格,以本身的需求改变行数和布局大小,样式已经开发完成了,只须要把代码放入合适的 HTML 代码位置便可
  • LESS: LESS 是基于 CSS 之上的高级语言,其目的是使得 CSS 开发更加灵活,更增强大
  • JavaScript:bootstrap 提供 JavaScript 库,该库超越了基本的架构和样式,开发者能够轻松的操做窗口警告框,工具提示框等,可避免了咱们费神费力的写脚本
  • 一致性: bootstrap 能够保证界面在不一样平台的统一性,不管实在 IE,Chrome 等
  • 持续更新: bootstrap 在不断的改进,更具规律性和持续性
  • 响应式: 不管是在 PC 端仍是移动端,均可以保持界面的一致性
  • 文档多: bootstrap 的很是多

 

6四、简述下node.js的认识?

中文文档参考:http://nodejs.cn/api/

简单的说 Node.js 就是运行在服务端的 JavaScript。一个新兴的前端框架,后台语言。

Node.js 是一个基于Chrome JavaScript 运行时创建的一个平台。 用于方便地搭建响应速度快、易于扩展的网络应用。

Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度很是快,性能很是好。很是适合在分布式设备上运行数据密集型的实时应用。

优势:

RESTful API
单线程    Node.js能够在不新增额外线程的状况下,依然能够对任务进行并发处理 —— Node.js是单线程的。它经过事件循环(event loop)来实现并发操做,对此,咱们应该要充分利用这一点 —— 尽量的避免阻塞操做,取而代之,多使用非阻塞操做。
非阻塞IO
V8虚拟机
事件驱动

 

6四、简述下vue.js的认识?

答:

Vue.js(读音 /vjuː/, 相似于 view) 是一套构建用户界面的渐进式框架。

Vue 核心库只关注视图层, 采用自底向上增量开发的设计。

Vue 的目标是经过尽量简单的 API 实现响应的数据绑定和组合的视图组件。

Vue 学习起来很是简单。

 

Vue.js的特性以下:

1.轻量级的框架

2.双向数据绑定

3.指令

4.插件化

 

6五、Mysql 高并发解决方案?

答:参考:https://blog.csdn.net/qiuweihong/article/details/78751466

正常的优化方案以下:

一、代码中sql语句优化

二、数据库字段优化,索引优化

三、加缓存,redis/memcache等

四、主从,读写分离

五、分区表

六、垂直拆分,解耦模块

七、水平切分

 

6六、InnoDB和MyIsam分别使用的什么索引,如何实现的?

参考:https://blog.csdn.net/z702143700/article/details/46049101

MyISAM索引实现:

MyISAM引擎使用B+Tree做为索引结构,叶节点的data域存放的是数据记录的地址。所以,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,若是指定的Key存在,则取出其data域的值,而后以data域的值为地址,读取相应数据记录。 
MyISAM的索引方式也叫作“非汇集”的,之因此这么称呼是为了与InnoDB的汇集索引区分。

 

InnoDB索引实现:

InnoDB也使用B+Tree做为索引结构,但具体实现方式却与MyISAM大相径庭。

区别:

一、InnoDB的数据文件自己就是索引文件。MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件自己就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,所以InnoDB表数据文件自己就是主索引。 

二、叶节点包含了完整的数据记录,这种索引叫作汇集索引

三、由于InnoDB的数据文件自己要按主键汇集,因此InnoDB要求表必须有主键(MyISAM能够没有),若是没有显式指定,则MySQL系统会自动选择一个能够惟一标识数据记录的列做为主键,若是不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段做为主键,这个字段长度为6个字节,类型为长整形。

四、InnoDB的全部辅助索引都引用主键做为data域。

五、汇集索引这种实现方式使得按主键的搜索十分高效,可是辅助索引搜索须要检索两遍索引:首先检索辅助索引得到主键,而后用主键到主索引中检索得到记录。

 

总结:

一、InnoDB不建议使用过长的字段做为主键。由于全部辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。

二、非单调(不是自增或自减的均为非单调)的字段做为主键在InnoDB中不是个好作法,由于InnoDB数据文件自己是一颗B+Tree,非单调的主键会形成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段做为主键则是一个很好的选择。

 

参考资料:

https://blog.csdn.net/Px01Ih8/article/details/80823381

相关文章
相关标签/搜索