面试题汇总(五)

1 字符串的拼接 如何高效的拼接两个字符串

用+号拼接javascript

2 字符串a='not 404 found 张三 99 深圳',每一个次中间是空格,用正则过滤掉英文和数字,最终输出'张三,深圳'

import re a = "not 404 found 张三 99 深圳" L = a.split(" ") # ['not', '404', 'found', '张三', '99', '深圳'] res = re.findall("\d+|[a-zA-Z]+", a) # ['not', '404', 'found', '99'] tmp = [item for item in L if not item in res] # ['张三', '深圳'] print(" ".join(tmp)) html

3 给定一个整数数组 nums, 其中刚好有两个元素之出现一次,其他全部元素均出现两次,找出只出现一次的那两个元素

def singleNumber(nums):   d={}   l=[]   for i in nums:     if i in d:       d[i]+=1     else:       d[i]=1     for k,v in d.items():       if v==1:       l.append(k)   return l前端

4 请写出一段python代码实现删除一个list里面的重复元素

s=set(list),而后再list(s)java

5 python中深浅拷贝的区别

浅拷贝:拷贝了最外围的对象自己,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,可是该对象中引用的其余对象我不复制python

深拷贝:外围和内部元素都进行了拷贝对象自己,而不是引用。也就是,把对象复制一遍,而且该对象中引用的其余对象我也复制。mysql

6 python中is 和==的区别

is检查两个对象是不是同一个对象,而==检查他们是否相等.linux

7 简述一下观察者模式

观察者模式是说你有一个观察者列表,这个列表中的函数或者某种功能都在观察某个事件的发生,一旦发生,这些函数或者功能就会自动执行,nginx

8 简述python多进程,多线程的区别以及适用场景

多进程 数据共享复杂,须要用IPC;数据是分开的,同步简单 占用内存多,切换复杂,CPU利用率低 建立销毁、切换复杂,速度慢 编程简单,调试简单 进程间不会互相影响 适应于多核、多机分布式;若是一台机器不够,扩展到多台机器比较简单 多线程 由于共享进程数据,数据共享简单,但也是由于这个缘由致使同步复杂 占用内存少,切换简单,CPU利用率高建立销毁、切换简单,速度很快 编程复杂,调试复杂 一个线程挂掉将致使整个进程挂掉 适应于多核分布式程序员

1)须要频繁建立销毁的优先用线程 2)须要进行大量计算的优先使用线程 3)强相关的处理用线程,弱相关的处理用进程 4)可能要扩展到多机分布的用进程,多核分布的用线程 5)都知足需求的状况下,用你最熟悉、最拿手的方式web

9 简述同步异步模型

函数或方法被调用的时候,调用者是否获得最终的结果。

直接获得最终结果的结果,就是同步调用。(打饭模型,打饭不打好不走开,直到打饭给我后才离开)

不直接获得的最终的结果,就是异步调用。(打饭,不会一直等着,会时不时的过来看看,打完了把饭拿走,异步不保证多长时间打完了饭)

10 举例熟悉的python web框架并说明

  1. Django

Django是一个开源的Web应用框架,由Python写成,支持许多数据库引擎,可让Web开发变得迅速和可扩展,并会不断的版本更新以匹配Python最新版本,若是是新手程序员,能够从这个框架入手。 二、Flask

?Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 受权。

?Flask也被称为 “microframework” ,由于它使用简单的核心,用 extension 增长其余功能。Flask没有默认使用的数据库、窗体验证工具。

?Flask 很轻,花不多的成本就可以开发一个简单的网站。很是适合初学者学习。Flask 框架学会之后,能够考虑学习插件的使用。例如使用 WTForm + Flask-WTForm 来验证表单数据,用 SQLAlchemy + Flask-SQLAlchemy 来对你的数据库进行控制。

三、Tornado

?Tornado是一种 Web 服务器软件的开源版本。Tornado 和如今的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,并且速度至关快。

?得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒能够处理数以千计的链接,所以 Tornado 是实时 Web 服务的一个 理想框架。

11若是custname字符串的编码格式为utf-8,如何将custname的内容转化为gbk18030的字符串

 

12 r,r+,rb,rb+文件打开模式的区别

r 只读模式 r+ 读写,能够写,内容在文件最开头 rb 读取一些非文本形式,二进制形式文件用到 rb+ 二进制读写

13 Jquery的美圆符号$有什么做用

在 jQuery 中,美圆符号($)仅仅是 jQuery 的别名,就表明了jQuery对象,例如,$("div") 和 jQuery("div")是等价的。 注意两点: 一、即便不使用 $ 也能保证jQuery的全部功能性。 二、为了不与其余javascript库的冲突,能够释放 jQuery 对 $ 变量的控制,同时为 jQuery 变量规定新的自定义名称。例如: 执行 var jq=$.noConflict(); 后,$ 将再也不控制当前的jQuery, 而是让渡给了jq变量,此时jq("div") 和 jQuery("div")是等价的

数据库相关

一、列举几种表链接方式,有什么区别,笛卡尔积是什么?

''' 内链接、自链接、外链接(左、右、全)、交叉链接 内链接:只有两个元素表相匹配的才能在结果集中显示。 外链接: 左外链接:左边为驱动表,驱动表的数据所有显示,匹配表的不匹配的不会显示。 右外链接:右边为驱动表,驱动表的数据所有显示,匹配表的不匹配的不会显示。 全外链接:链接的表中不匹配的数据所有会显示出来。 交叉链接: 笛卡尔效应,显示的结果是连接表数的乘积。

'''

二、数据库表结构须要变更的时候的数据库设计原则是什么?

''' 1:表必需要有主键。 2:一个字段只表示一个含义。 3:老是包含两个日期字段:gmt_create(建立日期),gmt_modified(修改日期),且这两个字段不该该包含有额外的业务逻辑。 4:MySQL中,gmt_create、gmt_modified使用DATETIME类型。 5:禁止使用复杂数据类型(数组,自定义类型等)。 6: MySQL中,附属表拆分后,附属表id与主表id保持一致。不容许在附属表新增主键字段。 7: MySQL中,存在过时概念的表,在其设计之初就必须有过时机制,且有明确的过时时间。过时数据必须迁移至历史表中。 8: MySQL中,再也不使用的表,必须通知DBA予以改名归档。 9: MySQL中,线上表中如有再也不使用的字段,为保证数据完整,禁止删除。 10: MySQL中,禁止使用OCI驱动,所有使用THI驱动。 '''

三、简述mysql、redis、mongodb、memcache等数据源的特色,以及其适用场景

'''

MongoDB: ---非关系型数据库,属于文档型数据库。由数据库、集合、文档对象三个层次组成。数据具有自述性,呈现分层的树状数据结构,数据结构由键值(key=>value)对组成! ---适合场景:事件的记录,内容管理或者博客平台等等。

MySQL: ---关系型数据库。在不一样的引擎上有不一样 的存储方式。查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。 ---适用场景:一、Web网站系统2:日志记录系统3:数据仓库系统4:嵌入式系统

Redis: ---非关系型数据库。Redis数据所有存在内存,按期写入磁盘,当内存不够时,能够选择指定的LRU算法删除数据。 ---应用场景:偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式 1.配合关系型数据库作高速缓存 2.缓存高频次数据,下降数据库io 3.分布式架构,作session共享

Memcache: ---不能持久化存储

,存储数据有限制:1M 【大于1M,认为就行分割】(内存碎片),mm存储数据只能key-value,集群数据没有复制和同步机制 【崩溃不会影响程序,会从数据库中取数据】,内存回收不能及时 ---应用场景:1.分布式应该,2.数据库前段缓存,3.服务器间数据共享。

'''

四、当MySQL查询遇到性能瓶颈的时候,如何优化(各类维度)

''' 硬件、系统配置、数据库表结构、SQL及索引 优化成本:硬件>系统配置>数据库表结构>SQL及索引

优化效果:硬件<系统配置<数据库表结构<SQL及索引 https://www.jianshu.com/p/4af41b682e06

'''

五、当MongoDB查询遇到性能瓶颈的时候,如何排查优化

''' 1.在查询条件、排序条件、统计条件的字段上选择建立索引,能够显著提升查询效率。

2.用$or时把匹配最 多 结果的条件放在最前面,用$and时把匹配最 少 结果的条件放在最前面。

3.使用limit()限定返回结果集的大小,减小数据库服务器的资源消耗,以及网络传输的数据量。

4.尽可能少用$in,而是分解成一个一个的单一查询。尤为是在分片上,$in会让你的查询去每个分片上查一次,若是实在要用的话,先在每一个分片上建索引。

5.尽可能不用模糊匹配查询,用其它精确匹配查询代替,好比$in、$nin。

6.查询量大、并发大的状况,经过前端加缓存解决。

7.能不用安全模式的操做就不用安全模式,这样客户端不必等待数据库返回查询结果以及处理异常,快了一个数量级。

8.MongoDB的智能查询优化,判断粒度为query条件,而skip和limit都不在其判断之中,当分页查询最后几页时,先用order反向排序。

9.尽可能减小跨分片查询,balance均衡次数少。

10.只查询要使用的字段,而不查询全部字段。

11.更新字段的值时,使用$inc比update效率高。

12.apped collections比普通collections的读写效率高。

13.server-side processing相似于SQL查询的存储过程,能够减小网络通信的开销。

14.必要时使用hint()强制使用某个索引查询。

15.若是有本身的主键列,则使用本身的主键列做为id,这样能够节约空间,也不须要建立额外的因此。

16.使用explain,根据exlpain plan进行优化。

17.范围查询的时候尽可能用$in、$nin代替。

18.查看数据库查询日志,具体分析的效率低的操做。

19.mongodb有一个数据库优化工具database profiler,可以检测数据库操做的性能。能够发现query或者write操做中执行效率低的,从而针对这些操做进行优化。

20.尽可能把更多的操做放在客户端,固然这就是mongodb设计的理念之一。

'''

部署类

一、简述一下docker,以及适用场景

''' docker: http://www.javashuo.com/article/p-xmgchlxt-hg.html ---Docker是一个基于容器技术的系统,一个为开发人员和系统管理员提供的分布式应用程序的开放平台 特色:开箱即用,快速部署,可移植性强,环境隔离 ---适用场景:1. 简化配置2. 代码流水线管理3. 提升开发效率4. 隔离应用5. 整合服务器6. 调试能力7. 多租户环境8. 快速部署 '''

二、简述一下K8S,以及里面经常使用的组件功能

''' Kubernetes: http://www.javashuo.com/article/p-hdpvynmr-s.html ---是一个开源的,用于管理云平台中多个主机上的容器化的应用,它的目标是让部署容器化的应用简单而且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制 组件: ---Master组件: Node组件:主要负责提供容器的各类依赖环境,并接受Master管理 核心附件:由第三方提供的特定应用程序 '''

三、当NGINX代理websocket的时候,常常会遇到定时断开的问题,请问如何解决?

''' 一、只要配置nginx.conf的对应localhost里面的这几个参数就好 proxy_connect_timeout; proxy_read_timeout; proxy_send_timeout; 二、发心跳包,原理就是在有效地再读时间内进行通信,从新刷新再读时间(配置的位置为localhost,给出简略地址) http { server { location / { root html; index index.html index.htm; proxy_pass http://webscoket; proxy_http_version 1.1; proxy_connect_timeout 4s; #配置点1 proxy_read_timeout 60s; #配置点2,若是没效,能够考虑这个时间配置长一点 proxy_send_timeout 12s; #配置点3 proxy_set_header Upgrade $http_upgrade; #这是webSocket的配置 proxy_set_header Connection "Upgrade"; #这是webSocket的配置 } } }

'''

四、nginx是否能实现热重启,并简述缘由

'''

'''

五、当不使用docker集群时,如何保证程序进程不会被杀掉并持续提供服务?或者简述supervisor

'''

'''

调试类

一、当借口开发完成是,与前端沟通联调须要注意哪些方面?

二、对于产品制做的用来描述功能的ue文档,如何拆解成能够开发的功能?在这方面须要注意那些?

三、当有一个新功能血药开发的时候,如何规划,而且如何协调?

四、若是你做为小队管理者,如何分派工做

自我认知与职业发展

一、您是否有您本身的职业规划,是否能够简单描述一下 二、您认为您擅长作那些工做、不上场那些工做? 三、您但愿在我司得到那些成长?当从我司离职的时候您但愿成为何样的人?

求打印test和list_new的值。 test = [{'day':1,'no':101},{'day':2,'no':301}, {'day':3,'no':3}, {'day':1,'no':401},{'day':3,'no':201}] list_new = list(test)

for i in test: if i['no']<=300: i['type'] = 'FB' else: i['type'] = 'BK'

list_new1 = 7

list_new.pop()

 

print(test) print('--------------------------') print(list_new)

[{'day': 1, 'no': 101, 'type': 'FB'}, {'day': 7, 'no': 301, 'type': 'BK'}, {'day': 3, 'no': 3, 'type': 'FB'}, {'day': 1, 'no': 401, 'type': 'BK'}, {'day': 3, 'no': 201, 'type': 'FB'}]

[{'day': 1, 'no': 101, 'type': 'FB'}, {'day': 7, 'no': 301, 'type': 'BK'}, {'day': 3, 'no': 3, 'type': 'FB'}, {'day': 1, 'no': 401, 'type': 'BK'}]

问题1】编写shell脚本将/SB1DATA目录下大雨10k的文件转移到/SB1BAEOD1目录下

vim first.sh

#! /bin/bash cd /SB1DATA for i in ls -l |awk '{if($5>10240){print $9}}' do mv $i/SB1BAEOD1 echo "done!" done guoch=date +%Y%m%d

mkdir ${guoch}

================================================

相关文章
相关标签/搜索