php
- php常用的数组及用法
array_merge
数组相加
array_map
array_filter
array_flip
array_diff
array_diff_assoc
- php魔术函数
__construct()
__destruct()
__call()
__callStatic()
__get()
__set()
__isset()
__unset()
__sleep() serialize()
__wakeup() unserialize()
__toString()
__clone()
- php私有成员变量
class A {
priveate $m1 = '';
protected $m2 = '';
};
class B extends A {
public function f1()
{
echo $m1."\n";
echo $m2."\n";
}
};
会产生什么样的输出
- 列举常用的打印函数及区别
echo
print
print_r
var_export
var_dump
printf
sprintf
- 实现一个单例模式
- 调试代码及日志的方法
打印输出
www日志
业务日志
php错误日志
xhprof
- 捕捉程序错误并记录日志如何实现
set_error_handle+set_exception_handle
register_shutdown_function
error_get_last
debug_backtrace
- php引用,写出如下代码的输出,并展示演算过程
$a = (object)array();
$b = $a;
$a->str = 1;
$b->child = $a;
$b->child->str = 2;
echo $b->str."\r\n";
$b = null;
echo $a->str."\r\n";
- 聊聊php如何并发请求url
multi curl
swoole AsyncIO
- 聊聊php如何并发请求mysql
MYSQLI_ASYNC
swoole AsyncIO
- 聊聊php多进程
system
exec
fork最大进程数量调度
supervisor进程管理
- 聊聊单点登录
- 聊聊登录保持
shell
- 聊聊top命令和输出,怎么看负载的高低
- 如何查看centos系统的版本号
- 按日期统计访问量,有如下nginx访问日志,日期按照日期分割,newhouse-ka-vip-www-20180101.log,用shell命令计算这个链接的/developer/vanke按照日期分组的访问量
26/02/2018:19:54:57 vanke.lianjia.com "GET /developer/vanke HTTP/1.1"
grep /developer/vanke newhouse-ka-vip-www-201801*.log | awk '{ print substr($2,1,10)}' | awk '{a[$1]+=1}END{for (i in a)print i,a[i]}'
算法
- 常用的排序算法
http://www.cnblogs.com/rainblack/p/5808694.html
冒泡排序(手写)
选择排序
插入排序
快速排序(手写)
- 常用的查找算法
http://blog.csdn.net/u012910292/article/details/55057046
顺序查找
二分查找(手写)
- 两个有序数组合并为一个及归并排序实例
http://www.cnblogs.com/andy-zhou/p/6669728.html
- 有一个数组,该数组由正负数字组成,找出该数组中连续元素组成的子数组求和最大值。
https://m.jb51.net/article/48910.htm
mysql
- mysql分表之后如何实现自增id
http://www.cnblogs.com/baiwa/p/5318432.html
http://blog.csdn.net/u010256841/article/details/56840743
http://blog.csdn.net/sunwenq2812/article/details/21998355
- mysql支持的索引种类
- mysql联合索引需要注意哪些,在一个拥有一个亿的表,存在字段agent_id唯一值1000万个,存在status唯一值10个,如果建立联合索引,agent_id和status哪个在前,说说为什么
- 分库分表有哪些种类及各自的应用场景
hash水平分表,适合按照用户id分库分表
垂直分表,适合内容字段和查询字段分开存储
日期分表,适合单表,叶子节点表,不和其他表发生关系的表
冷热数据分表,适合后端报表
-
浅谈mysql的事务和行锁
-
在高并发大流量和数据统计中的业务中,数据库的设计原则分别是什么?
A、满足业务
B、让核心SQL尽可能一个表里搞定,或是两个表搞定
C、节省IO,减少IO,一次查询返回的结果不宜过大,如果结果集比较大要分页查询
D、选择最少最合适的数据类型,条件字段尽量都是数字,不是数字也要转成数字,字符串字段单独拆一个表
E、索引要适度,索引太多影响数据更新速度
- 如果一个商品的缓存表(summary_sku)中有1000万条数据,其中POP(非自营)类型的商品大于800万条,由于业务变不需要了,如何清除这部分数据,该表每天还有大量查询,不能影响线上业务
A、由于删除的数据比保留的多,可以建新表,拷贝数据,旧表改个名字,新表改成旧表的名字
B、先批量查出要删除数据的主键,用脚本按照主键批量删除
C、删除时加limit 循环删除直到没有可删除记录为止
- 有表scores表如下,假设student是唯一的
student | college | class | course | score | term | exam_time |
---|---|---|---|---|---|---|
张三 | 计控 | 1班 | 高数 | 56 | 大一上学期 | 2016年12月31日 |
李四 | 计控 | 2班 | 高数 | 61 | 大一上学期 | 2017年3月10日 |
求计控学院一年级上学期有补考的同学(class,student)
select distinct class,student from (select class,course,student,count(*) as total
from scores
where colleg='计控' term='大一上学期'
group by course,student having total>1) as tmp
求计控学院一年级上学期高数有补考通过的同学数量按班级排行(class,人数)
select class,count(*) as total from (select class,student,score,count(*) as total
from (select * from scores order by exam_time desc) as tmp1
where colleg='计控' course='高数' term='大一上学期'
group by student having total>1 and score>=60) as tmp2 group by class order by total desc
求大一上学期没有学生补考的班级
select distinct college,class
from scores s
where s.student not in (select student from (
(select class,course,student,count(*) as total
from scores
where term='大一上学期'
group by course,student having total>1) as tmp)
- 有以下两个表
uid | name |
---|---|
100 | 闫红成 |
101 | 宋大卫 |
102 | 陈绿洲 |
学生表
uid | name |
---|---|
100 | 闫红成 |
101 | 宋大卫 |
102 | 陈绿洲 |
uid | subject_name | score |
---|---|---|
100 | 数学 | 99 |
100 | 语文 | 80 |
101 | 数学 | 98 |
score成绩表
uid | subject_name | score |
---|---|---|
100 | 数学 | 99 |
100 | 语文 | 80 |
101 | 数学 | 98 |
请写个sql列出所有同学的平均分,没有成绩的按0分算,按平均分由高到低排序
select student.id,student.name,if(score. uid is null,0,avg(score. scores)) as avg_scores
from student
left join score on student.uid=score.uid
group by student.uid
order by avg_scores desc
redis
- redis常用数据结构
key
string(缓存、计数、session)
hash
list(队列)
set(用户权限)
sorted set(投票、排行榜)
- redis能做什么
投票系统,用户登录session,购物车,网页缓存,日志系统,搜索引擎,消息队列
- 浅谈redis高并发抢购逻辑
a、一个商品一个队列,如果商品有10个库存,就在队列压10个1,抢购即从队列中取出一个
文档:http://www.cnblogs.com/phpper/p/7085663.html
b、watch+事务
文档:http://www.cnblogs.com/sandea/p/5731006.html
nginx+fpm
- nginx为什么高效
- cgi、fastcgi、php-cgi、php-fpm剖析
http://cuishan.win/2017/02/05/cgi-fastcgi-php-cgi-php-fpm/
- 如何提高ngxin+fpm的并发能力
- 怎样理解阻塞非阻塞与同步异步的区别?
https://www.zhihu.com/question/19732473
http://www.voidcn.com/article/p-nvskyjwx-bnb.html
https://www.zhihu.com/question/54959949
开发环境安装及命令
- linux安装ngxin、php-fpm、数据库
编译安装
yum、apt、brew
- ngxin 热启动命令
sudo /usr/local/bin/nginx -s reload
- php-fpm重启的命令
sudo /etc/init.d/php-fmp restart
- php命令
如何确定PHP CLI安装了哪些扩展
php -m
如何确定PHP CLI 的php.ini文件的位置
php --ini | grep ini
- php 插件安装
A、yum brew apt 等安装
B、pecl 安装
C、编译安装
下载插件源码,或者安装包的ext目录下
phpize
./configure --with-php-config=/usr/bin/php-config
make
make install
修改php.ini extension=插件.so
其他
- 平时用哪些开发工具
- 用过哪些代码管理工具
- 什么叫灰度发布
- 上一家公司的开发流程
- 上家公司项目上线流程是什么,发布代码后发生事故如何处理
- 面试者对链家有什么疑问和期待
网友评论