知乎面试题刷题

面试 admin 278℃ 0评论

1、平时喜欢哪些php书籍及博客?

CSDN、虎嗅、猎云

2、js闭包是什么?

function f1(){

    var n=999;

    function f2(){
      alert(n); 
    }

    return f2;

  }

  var result=f1();

  result(); // 999

 

闭包就是能够读取其他函数内部变量的函数。 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数”。 所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

 

3、for与foreach哪个更快?

My personal opinion is to use what makes sense in the context. Personally I almost never use for for array traversal. I use it for other types of iteration, but foreach is just too easy… The time difference is going to be minimal in most cases.

for 循环每次都要调用count,十分消耗性能

关于php foreach参看laruence的文章:深入理解PHP原理之foreach

 

4、php鸟哥是谁?能不能讲一下php执行原理?

这个参看鸟哥自己写的文章最权威:深入理解PHP原理之Opcodes

 

5、php加速器有哪些?apc、zend、xcache…..能不能讲一下它的加速原理?

这取决于php的执行原理,具体可参考题4所给的链接,php脚本解释编译的过程应该是可以缓存的,这样会大大提高php的执行性能,尤其是当程序非常稳定的时候

6、Node.js能彻底代替php+apache是扯淡。

 

7、怎样判断一个值是否存在于数组中?

in_array(),array_key_exists,……

8、怎样判断select语句中是否使用了索引?

explain

9、sphinx的中文分词词库使用第三方库还是自己建库?

10、如果一个被面试者经验少、基础差,此时却问些高深的知识。要怀疑它的稳定性,可以提问加班对他会不会有抵触。

11、mysql与mysqli的区别有哪些?

后者更安全更高级

12、将来的发展方向?安全、还是数据挖掘、大数据处理?

目前还不清楚,但这两年的规划比较清晰,对底层性能方面的知识进行补充,c, c++,对数学相关知识进行补充。

将来方向会是大数据和人工智能

13、php的面向对象:类的修饰符、封装、继承、多态体现方面

14、php 多态是什么?

java的多态体现的十分清晰,大体分两类:父类引用指向子类对象;接口引用指向实现接口的类对象。java声明变量时都要给变量设定类型,所以存在什么父类引用和接口引用。而php则没有这点体现,php声明变量不需要给变量设定类型,一个变量可以指向不同的数据类型。所以,php不具有像java一样的多态。

通过一个关键字instanceof来判断,变量指向的对象是否是animal类的一个实例,下面new cat(),new dog()都是animal子类的对象,而输出了“dog say wangwang…”和“cat say miaomiao…”,说明子类对象是父类的一个实例,从而达到了java多态的功能。

上边的类是抽象类,也表明了接口与实现接口的类对象同样可以适用。

php不具有像java那种清晰的多态,不是代表php不具有多态性

参考:https://blog.csdn.net/qq_30164225/article/details/54092712

15、Type Hinting:php.net/manual/en/langu

16、php的设计模式:单例模式、工厂模式、生产者模式……等23种

17、服务器状态码:200、202、301、404、500……

http://www.bkjia.com/headlines/491296.html

18、$i++与++$i的区别?

++$i是先自加1,然后再赋值
$i++是先赋值,再加1

19、项目开发:电商项目中的购物车数据持久化、考试系统的安全性考虑

session

试题防泄露(防注入,密码验证),登录玫击(验证码),注册验证码(认证注册),防火墙,劫持(https)

20、mysql设计基础:三大范式、功能->思维导图、创建表的第一字段是什么?

第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;

第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;

第三范式(3NF):必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);

21、mysql字段char、varchar、int、smallint、tinyint、mediumint、bigint、decimal、double、float字节数及应用场景。

依据存储空间选择,优化数据库存储结构,提高访问速度

22、memcache与mongoDB、Redis各自的使用场景是什么?

23、为什么mongoDB与Redis非但没有形成竞争反而是互补关系?

24、Redis数据类型有哪些?

int、string、hash、set、list

25、安装linux软件时使用make方式还使用yum方式?

make编译安装

yum更省事,会一起安装好依赖包

26、linux网络优化:查看进程ps -aux|grep mysqld、怎样查看最大文件打开数?

show variables like ‘%max_connections’

ulimit -n

27、C++语言中的虚函数是什么?

虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。

28、1条微薄要推送给100万个粉丝该怎么处理?

数据冷热分离,新浪微博按月存储数据

一天内登录的用户才推送

29、知道哪些算法?

冒泡排序?快速排序?二分查找法?

30、yii thinkphp ci 各自优点

31、php 设计模式有哪些?

工厂,寄存器,注册,组合,单例,装饰器,

32、c 排序算法有哪些?

冒泡,选择,插入,快速排序,希尔,堆

function shell($a){
    $count = count($a);
    $step = $count;
    do{
        $step = floor($step/3)+1;
        for($i=$step; $i<$count; $i++){
            $temp = $a[$i];
            for($j=$i-$step; $j>=0 && $a[$j]>$temp; $j-=$step){
                $a[$j+$step] = $a[$j];
            }
            $a[$j+$step] = $temp;
        }
    } while($step>1);
    return $a;
}

//保证原地排序,数组内移动数据,参考编程珠玑
function insert($a){
    $count = count($a);
    for($i=1; $i<$count; $i++){
        $temp = $a[$i];
        for($j=$i-1; $j>=0&&$a[$j]>$temp; $j--){
            $a[$j+1] = $a[$j];
        }
        //echo $j;exit;
        $a[$j+1] = $temp;
    }
    return $a;
}

33、php 基本结构是什么?

z_val

34、memcache magent 分布式设计?

35、redis 分布式设计,如何设计?

36、mongo 集群架构是怎样的?

37、mysql 索引原理及sql性能优化

38、tcp/ip 网络协议,osi7层指是什么?

39、php 处理大数据业务

40、linux 应用 负载性能查看 ?

41、nginx 实战优化业务功能 ?

42、谈一下近三年来你的得意之作?

43、看看简历,会问一些过去做的项目的用户量、pv、吞吐量、相关难点和解决方法等

44、数据库设计经验,为什么进行分表? 分库?

45、一般多少数据量开始分表? 分库? 分库分表的目的? 什么是数据库垂直拆分? 水平拆分? 分区等等?可以举例说明

46、数据库优化有哪些? 分别需要注意什么?

47、web开发方面会遇到哪些缓存? 分别如何优化?

cdn

内存缓存(redis, memcached)

浏览器缓存

应用服务器代码解释缓存(php opcache, abc)

数据库查询缓存

 

48、给你256M的内存,对10G的文件进行排序(文件每行1个数字),如何实现?

桶排序

49、对10G的文件进行查找如何实现?

桶排序,分成小文件,查找时只需要根据桶进行索引

50、统计10G文件每个关键字出现的次数如何实现?

分成小文件进行统计,然后相中,分治

51、假如你现在是12306火车订票的设计师,你该如何设计满足全国人民订票?

52、假如有1亿用户的访问量,你的服务器架构是怎样的? 用户信息的存储方案如何设计?

分库存储用户信息(DB1,DB2,DB3)取模hash

垂直拆分业务,将部分独立业务放到单独的库中,如日志,订单等

参考:https://www.csdn.net/article/2014-12-23/2823275

53、如果你是技术组长,所带团队任务进度无法完成你该如何解决?

分析,计划,总结,5why

54、如果在进度排满的前提下插入任务,你该如何保证总进度不延期?

按任务优先级进行任务重排,与领导沟通项目任务

能不延期的情况下尽量用其它时间解决问题

55、如果有的工程师今天预定任务没有完成,你该如何解决?

任务太难,能力不匹配

工作安排有问题,工作量过大

懒散

协同问题

应该及时沟通,未完成任务本身是工程师的问题,但作为leader, 应该按照 鼓励、警告、处理 的顺序来对待。任务延期,程序员应该主动及时向上沟通反馈

56、从你的经验方面谈一下如何构建高性能web站点? 需要哪些环节? 步骤? 每个步骤需要注意什么如何优化等?

架构:

前端负载均衡(LVS)

静态文件做CDN

数据做内存缓存(REDIS, MEMCACHED),减小数据库读压力

数据库做分布式架构,达到高可用,解决热点问题

前后端分离,某些服务单独布署(微服务架构)

57、为什么要对数据库进行主从分离?

如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。
为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载。
而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。

58、如何处理多服务器共享session?

https://blog.csdn.net/lamp_yang_3533/article/details/51984201

保存在内存服务器比较好,速度快,共享数据

memcache或redis是基于内存存储数据的,性能很高,尤其是高并发的情况下尤为合适。主要是因为从内存中读取数据要比从磁盘读取数据快很多。
内存数据库还支持数据过期失效的机制,正好与session的过期机制对应,推荐使用redis内存数据库,因为它比memcache支持更多的
数据类型,且支持内存数据备份到磁盘。

59、一个10G的表,你用php程序统计某个字段出现的次数,思路是?

分批count, 根据ID来进行分组,将结果再进行统计

60、告诉你一个nginx日志例子,用你认为最佳的编程语言统计一下http响应时间超过1秒的前10个url?

python版本

def read_log(self):
    f = gzip.open(self.filename, 'r')
    for line in f:
        all_line = line.split()
        try:
            a_line = dict(k.split('=') for k in all_line[8].split('&'))
            ip = all_line[1]  # 获取ip
            media_id = a_line['param']
            op = a_line['op']
        except:
            continue

 

61、给你一个mysql配置文件,用你认为最佳的编程语言解析该文件?

62、给你两个路径a和b,写一个算法或思路计算a和b差距几层并显示a和b的交集?

63、给你一个url,在nginx配置一下rewrite指定到某个具体路径?

 if ( $host != 'www.abc.com'  ) {

     rewrite ^/(.*) http://www.abc.com/$1 permanent;

  }

64、一个php文件的解释过程是? 一般加速php有哪些? 提高php整体性能会用到哪些技术?

65、session和cookie生存周期区别? 存储位置区别?

Session生命周期一般由服务器决定(Tomcat 默认20 min 失效),长时间没有活动的Session会被清除;

Cookie生命周期一般为浏览会话期,保存在内存中,若采用setMaxAge设置生命期,则将保存至硬盘。

session存储于服务端(文件,数据库,内存服务器)

cookie存储于客户端(浏览器内存)

66、require、include、require_once、include_once区别? 加载区别? 如果程序按需加载某个php文件你如何实现?

require() 通常来导入静态的内容,而 include() 则适合用来导入动态的程序代码。

include_once()函数,require_once() 函数会先检查目标档案的内容是不是在之前就已经导入过了,如果是的话,便不会再次重复导入同样的内容。

当要加载的文件不存在时候, include会给一个warning警告, 然后继续运行. 而require则会给一个fatal error, 直接结束脚本

67、chrome号称为多线程的,所以多线程和多进程的区别为?

进程是系统调用的最小单位,进程是cpu调度的最小单位

进程适合多核分布式,线程适合多核

线程是进程中的小单元,线程更节约资源

进程间相互独,线程间可以共享进程数据,同步难

68、php在2011年底出现hash碰撞,hash碰撞原理为? 如何进行修复?

由于php在运用hash表时(数组),存在hash碰撞的可能,可以精心构造一组碰撞数据,从而DDOS攻击服务器,占用服务器资源

参考:https://blog.csdn.net/ixidof/article/details/9099225

69、web不安全因素有哪些? 分别如何防范?

ddos(物理,软件,商业方案)

劫持(https)

用户信息(防注入,安全机制)

参考:https://blog.csdn.net/lifushan123/article/details/45197753

70、假如两个单链表相交,写一个最优算法计算交点位置,说思路也可以?

71、假如你是技术组长? 如何提高团队效率?

买书(发散思维,学习新技术,巩固基础知识)

定期分享(底层,工具,算法)

工作安排(计划,燃尽图)适时帮助,每日白板

72、nginx负载均衡有哪些? 如果其中一台服务器挂掉,报警机制如何实现?

lvs

73、不优化前提下,apache一般最大连接数为? nginx一般最大连接数为? mysql 每秒insert ? select ? update ? delete?

 

74、mysql 数据类型有哪些 ? 分别占用多少存储空间 ?

TINYINT 1字节
SAMLLINT 2个字节
MEDIUMINT 3个字节
INT 4个字节
BIGINT 8个字节
DATE 3个字节
DATETIME 8个字节
TIMESTAMP 4个字节
CHAR(M) M字节,1 <= M <= 255
VARCHAR(M) L+1字节,在此L <= M 和 1 <= M <=255

75、nginx设置缓存js、css、图片等信息,缓存的实现原理是?

利用请求的局部性原理,将请求过的内容在本地建立一个副本,下次访问时不再连接到后端服务器,直接响应本地内容

开启缓存
要使用缓存,首先要使用 proxy_cache_path 这个指令(必须放在 http 上下文的顶层位置),然后在目标上下文中使用 proxy_cache 指令
配置示例
http {
    ...
    proxy_cache_path /data/nginx/cache keys_zone=one:10m;

    server {
        proxy_cache one;
        location / {
          proxy_pass http://localhost:8000;
        }
    }
}

参考:https://www.cnblogs.com/jun1019/p/6260662.html

76、如何提高缓存命中率? 如何对缓存进行颗粒化?

从架构师的角度,需要应用尽可能的通过缓存直接获取数据,并避免缓存失效。这也是比较考验架构师能力的,需要在业务需求,缓存粒度,缓存策略,技术选型等各个方面去通盘考虑并做权衡。尽可能的聚焦在高频访问且时效性要求不高的热点业务上,通过缓存预加载(预热)、增加存储容量、调整缓存粒度、更新缓存等手段来提高命中率。
https://blog.csdn.net/dinglang_2009/article/details/53420215

77、php的内存回收机制是?

gc,引用计数,解决循环引用内存泄露问题

当根缓冲区满额时,PHP就会执行垃圾回收,此回收算法如下:
1、对每个根缓冲区中的根zval按照深度优先遍历算法遍历所有能遍历到的zval,并将每个zval的refcount减1,同时为了避免对同一zval多次减1(因为可能不同的根能遍历到同一个zval),每次对某个zval减1后就对其标记为“已减”。
2、再次对每个缓冲区中的根zval深度优先遍历,如果某个zval的refcount不为0,则对其加1,否则保持其为0。
3、清空根缓冲区中的所有根(注意是把这些zval从缓冲区中清除而不是销毁它们),然后销毁所有refcount为0的zval,并收回其内存。

1、并不是每次refcount减少时都进入回收周期,只有根缓冲区满额后在开始垃圾回收。
2、可以解决循环引用问题。
3、可以总将内存泄露保持在一个阈值以下。

关于内存泄漏,大家还可以参考下这篇文章:https://blog.csdn.net/u011250882/article/details/49564043

78、我的所有问题都问完了(当然没有这么多),你有什么问题问我没有?

双休,公司发展方向(与自己的期望方向是否吻合),项目团队(规模,管理模式),工作内容(近期,中期,远期)

———————————————————————————————

来自知乎链接:https://www.zhihu.com/question/67385409/answer/255583682

转载请注明:朋克网 » 知乎面试题刷题

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址