2019-8最新面试题汇总

1.Django-ORM

ORM (Object/Relation Mapping,简称ORM)对象映射关系程序。通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。

优点:隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。ORM使我们构造固化数据结构变得简单易行。

缺点:无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的

2.什么是进程?什么是线程?它们的区别是什么?

进程是系统中正在运行的一个程序,程序一旦运行就是进程。 线程是进程的一个实体,是进程的一条执行路径。线程是进程的一个特定执行路径。当一个线程修改了进程的资源,它的兄弟线程可以立即看到这种变化。

进程和线程的区别体现在以下几个方面:

一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。线程与进程的一个主要区别是,统一进程内的一个主要区别是,同一进程内的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时,每个线程还拥有自己的寄存器和栈,其他线程可以读写这些栈内存。

1.地址空间和其他资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其他进程内不可见。

2.通信:进程间通信IPC(管道,信号量,共享内存,消息队列),线程间可以直接独写进程数据段(如全局变量)来进程通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

3.调度和切换:线程上下文切换比进程上下文切换快得多。

4.在多线程OS中,进程不是一个可执行的实体。

3.装饰器 decorator

或称为包装器,是对函数的一种包装。它能使函数的功能得到扩充,而同时不用修改函数本身的代码。它能够增加函数执行前、执行后的行为,而不需对调用函数的代码做任何改变。

装饰器语法总结

完成一个装饰器需要两步:1.定义装饰器函数 2.在被装饰的函数定义之前加上 @装饰器

4.Python垃圾回收机制详解

一、引用计数   Python垃圾回收主要以引用计数为主,分代回收为辅。引用计数法的原理是每个对象维护一个ob_ref,用来记录当前对象被引用的次数,也就是来追踪到底有多少引用指向了这个对象,当发生以下四种情况的时候,该对象的引用计数器+1

二、标记-清除  针对循环引用的情况:我们有一个“孤岛”或是一组未使用的、互相指向的对象,但是谁都没有外部引用。换句话说,我们的程序不再使用这些节点对象了,所以我们希望Python的垃圾回收机制能够足够智能去释放这些对象并回收它们占用的内存空间。但是这不可能,因为所有的引用计数都是1而不是0。Python的引用计数算法不能够处理互相指向自己的对象。你的代码也许会在不经意间包含循环引用并且你并未意识到。事实上,当你的Python程序运行的时候它将会建立一定数量的“浮点数垃圾”,Python的GC不能够处理未使用的对象因为应用计数值不会到零。这就是为什么Python要引入Generational GC算法的原因!

三、分代回收

先给出gc的逻辑:(重点)

分配内存
-> 发现超过阈值了
-> 触发垃圾回收
-> 将所有可收集对象链表放到一起
-> 遍历, 计算有效引用计数
-> 分成 有效引用计数=0 和 有效引用计数 > 0 两个集合
-> 大于0的, 放入到更老一代
-> =0的, 执行回收
-> 回收遍历容器内的各个元素, 减掉对应元素引用计数(破掉循环引用)
-> 执行-1的逻辑, 若发现对象引用计数=0, 触发内存回收
-> python底层内存管理机制回收内存

Python中, 引入了分代收集, 总共三个”代”. Python 中, 一个代就是一个链表, 所有属于同一”代”的内存块都链接在同一个链表中 用来表示“代”的结构体是gc_generation, 包括了当前代链表表头、对象数量上限、当前对象数量。

5.TCP和UDP,以及它们的区别

TCP: 传输控制协议(英语:Transmission Control Protocol,缩写为TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

UDP:用户数据报协议(英语:User Datagram Protocol,缩写为UDP),又称使用者资料包协定,是一个简单的面向数据报的传输层协议,正式规范为RFC 768。

共同点

  • 传输层协议

不同点

  • UDP 继承 IP 的特性,不保证不丢失,不保证按顺序到达。TCP 就是提供可靠的数据,无差错、不丢失、不重复、按循序到达。

  • TCP提供有保证的数据传输,而UDP不提供

  • TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性, 但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;

  • UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号, 发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议

  • UDP 是数据格式基于数据报,一个一个的发,一个一个的收。TCP 是面向字节流,发送的是一个流数据。

  • UDP 是不处理堵塞,应用需要发,就会发送。TCP 还拥有堵塞控制,TCP 会根据网络环境调整发包的频率。

  • UDP 支持多播和广播

TCP、UDP对比:
 TCPUDP
可靠性 可靠 不可靠
连接性 面向连接 无连接
报文 面向字节流 面向报文
效率 传输效率低 传输效率高
双工性 全双工 一对一、一对多、多对一、多对多
流量控制 有(滑动窗口)
拥塞控制 有(慢开始、拥塞避免、快重传、快恢复)

6.uwsgi概念和作用

WSGI

WSGI是一种WEB服务器==网关接口==。 是一个Web服务器(如nginx)与应用服务器(如uWSGI)通信的一种规范(协议)。

在生产环境中使用WSGI作为python web的服务器。Python Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛接受。WSGI没有官方的实现, 因为WSGI更像一个协议,只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行。

uWSGI

uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。uWSGI代码完全用C编写,效率高、性能稳定。

uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型。

作用

Django 是一个 Web 框架,框架的作用在于处理 request 和 reponse,其他的不是框架所关心的内容。所以怎么部署 Django 不是 Django 所需要关心的。

Django 所提供的是一个开发服务器,这个开发服务器,没有经过安全测试,而且使用的是 Python 自带的 simple HTTPServer 创建的,在安全性和效率上都是不行的

而uWSGI 是一个全功能的 HTTP 服务器,他要做的就是把 HTTP 协议转化成语言支持的网络协议。比如把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用。

uwsgi 是一种 uWSGI 的内部协议,使用二进制方式和其他应用程序进行通信。

7.进程间的通信机制

套接字:套接字socket,由目标计算机的IP地址和进程的端口号组成

共享内存:由一个进程创建,但是多个进程可以访问

消息队列:存放在内核中的消息链表

信号:向接收进程通知某个事件已经发生

信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源

管道:半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

有名管道:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信

8.nginx和uwsgi的区别和作用

  1. nginx是对外的服务器,外部浏览器通过url访问nginx, uwsgi是对内的服务器,主要用来处理动态请求。

  2. nginx接收到浏览器发送过来的http请求,将包进行解析,分析url,

    a.如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件,

    b.如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi,

 uwsgi接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,
wsgi根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将
返回值再次交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接收的格式,
uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。

nginx默认的路径

cd /usr/local/etc/nginx/servers

9.mysql 四种隔离级别

事务的 四个特征(ACID)

事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。

1 、原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

2 、一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。

3 、隔离性。一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4 、持续性。也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

Mysql的四种隔离级别

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

Read Uncommitted(读取未提交内容)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Read Committed(读取提交内容)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

Repeatable Read(可重读)

这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化)

这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

10.Python PIL

PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。其官方主页为:PIL。 PIL历史悠久,原来是只支持python2.x的版本的,后来出现了移植到python3的库pillow,pillow号称是friendly fork for PIL,其功能和PIL差不多,但是支持python3

GIL全局锁

 

11.Django框架工作流程(Python)

1、浏览器发送请求request给web服务器;

2、web服务器将请求转发给Django框架处理; (Django接收到第一个请求,会调用中间件的init方法,完成中间件的初始化)

3、处理请求前调用proces_request(request),返回None或HttpResponse对象;

4、通过URLconf匹配,确认请求由哪个视图处理;

5、process_view(request,view_func,view_args,view_kwargs)在处理视图前调用,返回None或HttpResponse对象;

6、视图接收到resquest;

(1) 通过模型model与数据库交互,获取并处理数据,Model内嵌ORM框架,实现面向对象来操作数据库; (2) 模板引擎,实现动态展示数据,返回HttpResponse对象或者JsonResponse对象。

7、视图处理响应后返回response,所有的response(包括process_request和process_view返回的response)在返回给Django前都会调用process_response(request,response),返回HttpResponse对象,除非做了特殊处理。(如果视图抛出异常,在每个请求上调用precess_exception(request,exception),返回None或HttpResponse对象。)

12.Linux

Linux 10个主流发行版本

Ubuntu,Linux MintPCLinuxOS是其中最易用使用的。想快速部署使用,就可以选择这几个。尤其对于新手,已经做到了和Windows类似的易用程度了。另一方面,Slackware Linux,Arch LinuxFreeBSD是更激进的发行版,更新比较频繁,所以需要有一定的基础。不然,哪天搞崩了都不知道问题所在。 openSUSE,Fedora,Debian GNU/LinuxMageia则是比较保守的发行版。稳定性是他们的特点。但是软件包都比较旧。很多桌面版本的新功能没法用。CentOS是一个企业级的发行版,适合那些喜欢稳定性,可靠性和软件长期支持的用户。

Linux下查看内存使用情况方法总结

1. /proc/meminfo

cat /proc/meminfo

查看RAM使用情况最简单的方法是通过/proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo列出了所有你想了解的内存的使用情况。进程的内存使用信息也可以通过/proc/<pid>/statm 和 /proc/<pid>/status 来查看。

2. atop

sudo atop

atop命令是一个终端环境的监控命令。它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注

3. free

free -h

free命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。

4. GNOME System Monitor

gnome-system-monitor

GNOME System Monitor 是一个显示最近一段时间内的CPU、内存、交换区及网络的使用情况的视图工具。它还提供了一种查看CPU及内存使用情况的方法。

5. htop

htop

htop命令显示了每个进程的内存实时使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。列表可以水平及垂直滚动。

6. ps

ps aux --sort -rss

ps命令可以实时的显示各个进程的内存使用情况。Reported memory usage information includes %MEM (percent of physical memory used), VSZ (total amount of virtual memory used), and RSS (total amount of physical memory used)

7. top

top命令提供了实时的运行中的程序的资源使用统计

13.Flask和Django区别

Flask:

1:轻量级web框架,只有一个内核,默认依赖两个外部库:Jinja2 模板引擎和 Werkzeug WSGI 工具集,自由,灵活,可扩展性强,开发者可以根据需求自己造轮子
2:适用于做小型网站以及web服务的API,开发大型网站无压力,架构需自行设计
3:与关系型数据库结合不弱于Django,而与非关系型数据库的结合远远优于Django

Django:

1:重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择应用上花费大量时间
2:自带ORM(Object-Relational Mapping 对象关联映射)和模板引擎,支持JinJa等非官方模板引擎,灵活度不高
3:自带ORM使Django和关系型数据库耦合度过高,如果要使用非关系型数据库,需要使用第三方库
4:自带数据库管理app
5:成熟、稳定、开发效率高、相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发
6:python web框架的先驱,第三方库丰富
7:上手容易,开发文档详细、完善、资料丰富

14.Linux命令

  1. 编辑vi/vim(i, a,o)

  2. 保存退出:wq回车 不保存退出:w!回车 强制退出:q回车

  3. 单行:yy粘贴 p复制 多行:shift+v+行数 shift+y+p

  4. 剪切:复制--->删除--->粘贴

  5. 撤销:u(返回上一步操作) ctrl+r(反撤销)

  6. 单个替换:

    • 单字符替换:移动到指定位置+r+%s/<new>/<hello>/g 新字符

    • 替换一个词:%s/新字符被替换的词/新词/g

    • a:替换所有 c:局部替换 q:结束本次替换

  7. 块操作:范围+shift+V+上下键选取 复制一页:光标移到要复制字符的段首或尾+ctrl+v+左右+y

  8. 跳转:跳转到文件首:gg/home/^ 文件尾部:G/end/$

  9. JK上下 HL左右

  10. 设置编号:setnu 去除编号:setnonu

  11. 定位错误行:vi+文件+空格+行号

  12. 查找:进入末行模式 /<key>/回车

  13. 窗口分割:sp<filename> 上下分割窗口,同时打开另一个文件 vs<filenname>左右分割,同时打开新文件

  14. 查看隐藏文件:ll -a


15.前后端分离架构概述

前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。

核心思想是前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互。
Web服务器:一般指像Nginx,Apache这类的服务器,他们一般只能解析静态资源;
应用服务器:一般指像Tomcat,Jetty,Resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好;一般都是只有web服务器才能被外网访问,应用服务器只能内网访问。

前端:负责View和Controller层。 后端:只负责Model层,业务/数据处理等。

可是服务端人员对前端HTML结构不熟悉,前端也不懂后台代码呀,controller层如何实现呢?这就是node.js的妙用了,node.js适合运用在高并发、I/O密集、少量业务逻辑的场景。最重要的一点是,前端不用再学一门其他的语言了,对前端来说,上手度大大提高

可以就把Nodejs当成跟前端交互的api。总得来说,Nodejs的作用在mvc中相当于C(控制器)。Nodejs路由的实现逻辑是把前端静态页面代码当成字符串发送到客户端(例如浏览器),简单理解可以理解为路由是提供给客户端的一组api接口,只不过返回的数据是页面代码的字符串而已。

用NodeJs来作为桥梁架接服务器端API输出的JSON。后端出于性能和别的原因,提供的接口所返回的数据格式也许不太适合前端直接使用,前端所需的排序功能、筛选功能,以及到了视图层的页面展现,也许都需要对接口所提供的数据进行二次处理。这些处理虽可以放在前端来进行,但也许数据量一大便会浪费浏览器性能。因而现今,增加Node中间层便是一种良好的解决方案。


 

16.Linux下查看80端口

  • 检测是否被占用:

  1. ps -ef |grep 80

  2. netstat -anp |grep :80

  3. lsof -i:80

  4. netstat -tunlp |grep :80

  5. netstat -an |grep :80

  • 解决80端口占用:

    先检测80端口的id

    kill -9 pid


 

17.公司有多少部门

人事部门,财务部门,推广部门,技术部,运维和测试

 

18.Python中is和==的区别

is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)

相同点:

is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同,==比较操作符和is同一性运算符区别

不同点:

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同


 

19.ETL和MATLAB的定义和用法

ETL

定义:

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据

ETL的设计分三部分:数据抽取、数据的清洗转换、数据的加载

一、 数据的抽取(Extract)

1、对于与存放DW的数据库系统相同的数据源处理方法

2、对于与DW数据库系统不同的数据源的处理方法

3、对于文件类型数据源(.txt,.xls)

4、增量更新的问题

二、数据的清洗转换(Cleaning、Transform)

通常的做法是从业务系统到ODS做清洗,将脏数据和不完整数据过滤掉,在从ODS到DW的过程中转换,进行一些业务规则的计算和聚合

1、 数据清洗

(1)不完整的数据

(2)错误的数据

(3)重复的数据

2、 数据转换

(1)不一致数据转换

(2)数据粒度的转换

(3)商务规则的计算

三、ETL日志、警告发送

1、 ETL日志

一类是执行过程日志一类是错误日志第三类日志是总体日志

2、 警告发送

ETL有几个特点

一是数据同步,它不是一次性倒完数据就拉到,它是经常性的活动,按照固定周期运行的,甚至现在还有人提出了实时ETL的概念。

二是数据量,一般都是巨大的,值得你将数据流动的过程拆分成E、T和L。


MATLAB*

定义和用途:

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理信号检测金融建模设计与分析等领域。

主要功能:

数值分析数值和符号计算工程与科学绘图控制系统的设计与仿真
数字图像处理 数字信号处理 通讯系统设计与仿真 财务与金融工程

重要功能

·MATLAB®: MATLAB 语言的单元测试框架

·Trading Toolbox™: 一款用于访问价格并将订单发送到交易系统的新产品

·Financial Instruments Toolbox™: 赫尔-怀特、线性高斯和 LIBOR 市场模型的校准和 Monte Carlo 仿真

·Image Processing Toolbox™: 使用有效轮廓进行图像分割、对 10 个函数实现 C 代码生成,对 11 个函数使用 GPU 加速

·Image Acquisition Toolbox™: 提供了用于采集图像、深度图和框架数据的 Kinect® for Windows®传感器支持

·Statistics Toolbox™: 用于二进制分类的支持向量机 (SVM)、用于缺失数据的 PCA 算法和 Anderson-Darling 拟合优度检验

·Data Acquisition Toolbox™: 为 Digilent Analog Discovery Design Kit 提供了支持包

·Vehicle Network Toolbox™: 为访问 CAN 总线上的 ECU 提供 XCP

优势特点

编辑

1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;

2) 具有完备的图形处理功能,实现计算结果和编程的可视化;

3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;

4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

应用方面

MATLAB 产品族可以用来进行以下各种工作:

●数值分析

●数值和符号计算

●工程与科学绘图

●控制系统的设计与仿真

数字图像处理技术

数字信号处理技术

●通讯系统设计与仿真

●财务与金融工程

●管理与调度优化计算(运筹学)

20.Django框架的介绍(架构)

特点

1) 重量级框架 对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。

1.提供项目工程管理的自动化脚本工具 2.数据库ORM支持(对象关系映射,英语:Object Relational Mapping) 3.模板 4.表单 5.Admin管理站点 6.文件管理 7.认证权限 8.session机制 9.缓存 2)MVT模式 有一种程序设计模式叫MVC,其核心思想是分工、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。 MVC模式说明:

M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。 V全拼为View,用于封装结果,生成页面展示的html内容。 C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

Django的MVT

M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。 V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。 T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

注:差异就在于黑线黑箭头标识出来的部分

Django的优点

1.功能完善、要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站。

2.完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。

3.强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习SQL语言即可对数据库进行操作。

4.Django先进的App设计理念: App是可插拔的,是不可多得的思想。不需要了,可以直接删除,对系统整体影响不大。

5.自带台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。

6.Django debug信息详尽: 很容易找出代码错误所在。

Django的缺点

1.大包大揽: 对于一些轻量级应用不需要的功能模块Django也包括了,不如Flask轻便。

2.过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就比较困难。

3.性能劣势: 与C, C++性能上相比,Django性能偏低,当然这是python的锅,其它python框架在流量上来后会有同样问题。

4.模板问题: django的模板实现了代码和样式完全分离,不允许模板里出现python代码,灵活度对某些程序员来说可能不够。

21.大数据的理解

大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产,大数据包括结构化、半结构化和非结构化数据,非结构化数据越来越成为数据的主要部分

小的基本单位是bit,按顺序给出所有单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。

1 Byte =8 bit

1 KB = 1,024 Bytes = 8192 bit

1 MB = 1,024 KB = 1,048,576 Bytes

1 GB = 1,024 MB = 1,048,576 KB

1 TB = 1,024 GB = 1,048,576 MB

1 PB = 1,024 TB = 1,048,576 GB

1 EB = 1,024 PB = 1,048,576 TB

1 ZB = 1,024 EB = 1,048,576 PB

1 YB = 1,024 ZB = 1,048,576 EB

1 BB = 1,024 YB = 1,048,576 ZB

1 NB = 1,024 BB = 1,048,576 YB

1 DB = 1,024 NB = 1,048,576 BB

大数据的价值体现在以下几个方面:

1)对大量消费者提供产品或服务的企业可以利用大数据进行精准营销

2) 做小而美模式的中小微企业可以利用大数据做服务转型

3) 面临互联网压力之下必须转型的传统企业需要与时俱进充分利用大数据的价值

22.2019/8月-面试题

 


 

from os import walk, getcwd

path = getcwd() # 路径 search_file_name = '1.png' # 查找的文件名

def search_file(path, file_name): ​ for dirs, _dir, file in walk(path): ​ for i in file: ​ if file_name in i: ​ print(dirs + i)

if name == 'main': ​ search_file(path, search_file_name)


 

 

 

 

 

 

 

 

 

 

 

1.Django-ORM

ORM (Object/Relation Mapping,简称ORM)对象映射关系程序。通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。

优点:隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。ORM使我们构造固化数据结构变得简单易行。

缺点:无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的

2.什么是进程?什么是线程?它们的区别是什么?

进程是系统中正在运行的一个程序,程序一旦运行就是进程。 线程是进程的一个实体,是进程的一条执行路径。线程是进程的一个特定执行路径。当一个线程修改了进程的资源,它的兄弟线程可以立即看到这种变化。

进程和线程的区别体现在以下几个方面:

一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。线程与进程的一个主要区别是,统一进程内的一个主要区别是,同一进程内的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时,每个线程还拥有自己的寄存器和栈,其他线程可以读写这些栈内存。

1.地址空间和其他资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其他进程内不可见。

2.通信:进程间通信IPC(管道,信号量,共享内存,消息队列),线程间可以直接独写进程数据段(如全局变量)来进程通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

3.调度和切换:线程上下文切换比进程上下文切换快得多。

4.在多线程OS中,进程不是一个可执行的实体。

3.装饰器 decorator

或称为包装器,是对函数的一种包装。它能使函数的功能得到扩充,而同时不用修改函数本身的代码。它能够增加函数执行前、执行后的行为,而不需对调用函数的代码做任何改变。

装饰器语法总结

完成一个装饰器需要两步:1.定义装饰器函数 2.在被装饰的函数定义之前加上 @装饰器

4.Python垃圾回收机制详解

一、引用计数   Python垃圾回收主要以引用计数为主,分代回收为辅。引用计数法的原理是每个对象维护一个ob_ref,用来记录当前对象被引用的次数,也就是来追踪到底有多少引用指向了这个对象,当发生以下四种情况的时候,该对象的引用计数器+1

二、标记-清除  针对循环引用的情况:我们有一个“孤岛”或是一组未使用的、互相指向的对象,但是谁都没有外部引用。换句话说,我们的程序不再使用这些节点对象了,所以我们希望Python的垃圾回收机制能够足够智能去释放这些对象并回收它们占用的内存空间。但是这不可能,因为所有的引用计数都是1而不是0。Python的引用计数算法不能够处理互相指向自己的对象。你的代码也许会在不经意间包含循环引用并且你并未意识到。事实上,当你的Python程序运行的时候它将会建立一定数量的“浮点数垃圾”,Python的GC不能够处理未使用的对象因为应用计数值不会到零。这就是为什么Python要引入Generational GC算法的原因!

三、分代回收

先给出gc的逻辑:(重点)

分配内存
-> 发现超过阈值了
-> 触发垃圾回收
-> 将所有可收集对象链表放到一起
-> 遍历, 计算有效引用计数
-> 分成 有效引用计数=0 和 有效引用计数 > 0 两个集合
-> 大于0的, 放入到更老一代
-> =0的, 执行回收
-> 回收遍历容器内的各个元素, 减掉对应元素引用计数(破掉循环引用)
-> 执行-1的逻辑, 若发现对象引用计数=0, 触发内存回收
-> python底层内存管理机制回收内存

Python中, 引入了分代收集, 总共三个”代”. Python 中, 一个代就是一个链表, 所有属于同一”代”的内存块都链接在同一个链表中 用来表示“代”的结构体是gc_generation, 包括了当前代链表表头、对象数量上限、当前对象数量。

5.TCP和UDP,以及它们的区别

TCP: 传输控制协议(英语:Transmission Control Protocol,缩写为TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

UDP:用户数据报协议(英语:User Datagram Protocol,缩写为UDP),又称使用者资料包协定,是一个简单的面向数据报的传输层协议,正式规范为RFC 768。

共同点

  • 传输层协议

不同点

  • UDP 继承 IP 的特性,不保证不丢失,不保证按顺序到达。TCP 就是提供可靠的数据,无差错、不丢失、不重复、按循序到达。

  • TCP提供有保证的数据传输,而UDP不提供

  • TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性, 但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;

  • UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号, 发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议

  • UDP 是数据格式基于数据报,一个一个的发,一个一个的收。TCP 是面向字节流,发送的是一个流数据。

  • UDP 是不处理堵塞,应用需要发,就会发送。TCP 还拥有堵塞控制,TCP 会根据网络环境调整发包的频率。

  • UDP 支持多播和广播

TCP、UDP对比:
 TCPUDP
可靠性 可靠 不可靠
连接性 面向连接 无连接
报文 面向字节流 面向报文
效率 传输效率低 传输效率高
双工性 全双工 一对一、一对多、多对一、多对多
流量控制 有(滑动窗口)
拥塞控制 有(慢开始、拥塞避免、快重传、快恢复)

6.uwsgi概念和作用

WSGI

WSGI是一种WEB服务器==网关接口==。 是一个Web服务器(如nginx)与应用服务器(如uWSGI)通信的一种规范(协议)。

在生产环境中使用WSGI作为python web的服务器。Python Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛接受。WSGI没有官方的实现, 因为WSGI更像一个协议,只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行。

uWSGI

uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。uWSGI代码完全用C编写,效率高、性能稳定。

uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型。

作用

Django 是一个 Web 框架,框架的作用在于处理 request 和 reponse,其他的不是框架所关心的内容。所以怎么部署 Django 不是 Django 所需要关心的。

Django 所提供的是一个开发服务器,这个开发服务器,没有经过安全测试,而且使用的是 Python 自带的 simple HTTPServer 创建的,在安全性和效率上都是不行的

而uWSGI 是一个全功能的 HTTP 服务器,他要做的就是把 HTTP 协议转化成语言支持的网络协议。比如把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用。

uwsgi 是一种 uWSGI 的内部协议,使用二进制方式和其他应用程序进行通信。

7.进程间的通信机制

套接字:套接字socket,由目标计算机的IP地址和进程的端口号组成

共享内存:由一个进程创建,但是多个进程可以访问

消息队列:存放在内核中的消息链表

信号:向接收进程通知某个事件已经发生

信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源

管道:半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

有名管道:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信

8.nginx和uwsgi的区别和作用

  1. nginx是对外的服务器,外部浏览器通过url访问nginx, uwsgi是对内的服务器,主要用来处理动态请求。

  2. nginx接收到浏览器发送过来的http请求,将包进行解析,分析url,

    a.如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件,

    b.如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi,

 uwsgi接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,
wsgi根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将
返回值再次交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接收的格式,
uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。

nginx默认的路径

cd /usr/local/etc/nginx/servers

9.mysql 四种隔离级别

事务的 四个特征(ACID)

事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。

1 、原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

2 、一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。

3 、隔离性。一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4 、持续性。也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

Mysql的四种隔离级别

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

Read Uncommitted(读取未提交内容)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Read Committed(读取提交内容)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

Repeatable Read(可重读)

这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化)

这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

10.Python PIL

PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。其官方主页为:PIL。 PIL历史悠久,原来是只支持python2.x的版本的,后来出现了移植到python3的库pillow,pillow号称是friendly fork for PIL,其功能和PIL差不多,但是支持python3

GIL全局锁

 

11.Django框架工作流程(Python)

1、浏览器发送请求request给web服务器;

2、web服务器将请求转发给Django框架处理; (Django接收到第一个请求,会调用中间件的init方法,完成中间件的初始化)

3、处理请求前调用proces_request(request),返回None或HttpResponse对象;

4、通过URLconf匹配,确认请求由哪个视图处理;

5、process_view(request,view_func,view_args,view_kwargs)在处理视图前调用,返回None或HttpResponse对象;

6、视图接收到resquest;

(1) 通过模型model与数据库交互,获取并处理数据,Model内嵌ORM框架,实现面向对象来操作数据库; (2) 模板引擎,实现动态展示数据,返回HttpResponse对象或者JsonResponse对象。

7、视图处理响应后返回response,所有的response(包括process_request和process_view返回的response)在返回给Django前都会调用process_response(request,response),返回HttpResponse对象,除非做了特殊处理。(如果视图抛出异常,在每个请求上调用precess_exception(request,exception),返回None或HttpResponse对象。)

12.Linux

Linux 10个主流发行版本

Ubuntu,Linux MintPCLinuxOS是其中最易用使用的。想快速部署使用,就可以选择这几个。尤其对于新手,已经做到了和Windows类似的易用程度了。另一方面,Slackware Linux,Arch LinuxFreeBSD是更激进的发行版,更新比较频繁,所以需要有一定的基础。不然,哪天搞崩了都不知道问题所在。 openSUSE,Fedora,Debian GNU/LinuxMageia则是比较保守的发行版。稳定性是他们的特点。但是软件包都比较旧。很多桌面版本的新功能没法用。CentOS是一个企业级的发行版,适合那些喜欢稳定性,可靠性和软件长期支持的用户。

Linux下查看内存使用情况方法总结

1. /proc/meminfo

cat /proc/meminfo

查看RAM使用情况最简单的方法是通过/proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo列出了所有你想了解的内存的使用情况。进程的内存使用信息也可以通过/proc/<pid>/statm 和 /proc/<pid>/status 来查看。

2. atop

sudo atop

atop命令是一个终端环境的监控命令。它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注

3. free

free -h

free命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。

4. GNOME System Monitor

gnome-system-monitor

GNOME System Monitor 是一个显示最近一段时间内的CPU、内存、交换区及网络的使用情况的视图工具。它还提供了一种查看CPU及内存使用情况的方法。

5. htop

htop

htop命令显示了每个进程的内存实时使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。列表可以水平及垂直滚动。

6. ps

ps aux --sort -rss

ps命令可以实时的显示各个进程的内存使用情况。Reported memory usage information includes %MEM (percent of physical memory used), VSZ (total amount of virtual memory used), and RSS (total amount of physical memory used)

7. top

top命令提供了实时的运行中的程序的资源使用统计

13.Flask和Django区别

Flask:

1:轻量级web框架,只有一个内核,默认依赖两个外部库:Jinja2 模板引擎和 Werkzeug WSGI 工具集,自由,灵活,可扩展性强,开发者可以根据需求自己造轮子
2:适用于做小型网站以及web服务的API,开发大型网站无压力,架构需自行设计
3:与关系型数据库结合不弱于Django,而与非关系型数据库的结合远远优于Django

Django:

1:重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择应用上花费大量时间
2:自带ORM(Object-Relational Mapping 对象关联映射)和模板引擎,支持JinJa等非官方模板引擎,灵活度不高
3:自带ORM使Django和关系型数据库耦合度过高,如果要使用非关系型数据库,需要使用第三方库
4:自带数据库管理app
5:成熟、稳定、开发效率高、相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发
6:python web框架的先驱,第三方库丰富
7:上手容易,开发文档详细、完善、资料丰富

14.Linux命令

  1. 编辑vi/vim(i, a,o)

  2. 保存退出:wq回车 不保存退出:w!回车 强制退出:q回车

  3. 单行:yy粘贴 p复制 多行:shift+v+行数 shift+y+p

  4. 剪切:复制--->删除--->粘贴

  5. 撤销:u(返回上一步操作) ctrl+r(反撤销)

  6. 单个替换:

    • 单字符替换:移动到指定位置+r+%s/<new>/<hello>/g 新字符

    • 替换一个词:%s/新字符被替换的词/新词/g

    • a:替换所有 c:局部替换 q:结束本次替换

  7. 块操作:范围+shift+V+上下键选取 复制一页:光标移到要复制字符的段首或尾+ctrl+v+左右+y

  8. 跳转:跳转到文件首:gg/home/^ 文件尾部:G/end/$

  9. JK上下 HL左右

  10. 设置编号:setnu 去除编号:setnonu

  11. 定位错误行:vi+文件+空格+行号

  12. 查找:进入末行模式 /<key>/回车

  13. 窗口分割:sp<filename> 上下分割窗口,同时打开另一个文件 vs<filenname>左右分割,同时打开新文件

  14. 查看隐藏文件:ll -a


15.前后端分离架构概述

前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。

核心思想是前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互。
Web服务器:一般指像Nginx,Apache这类的服务器,他们一般只能解析静态资源;
应用服务器:一般指像Tomcat,Jetty,Resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好;一般都是只有web服务器才能被外网访问,应用服务器只能内网访问。

前端:负责View和Controller层。 后端:只负责Model层,业务/数据处理等。

可是服务端人员对前端HTML结构不熟悉,前端也不懂后台代码呀,controller层如何实现呢?这就是node.js的妙用了,node.js适合运用在高并发、I/O密集、少量业务逻辑的场景。最重要的一点是,前端不用再学一门其他的语言了,对前端来说,上手度大大提高

可以就把Nodejs当成跟前端交互的api。总得来说,Nodejs的作用在mvc中相当于C(控制器)。Nodejs路由的实现逻辑是把前端静态页面代码当成字符串发送到客户端(例如浏览器),简单理解可以理解为路由是提供给客户端的一组api接口,只不过返回的数据是页面代码的字符串而已。

用NodeJs来作为桥梁架接服务器端API输出的JSON。后端出于性能和别的原因,提供的接口所返回的数据格式也许不太适合前端直接使用,前端所需的排序功能、筛选功能,以及到了视图层的页面展现,也许都需要对接口所提供的数据进行二次处理。这些处理虽可以放在前端来进行,但也许数据量一大便会浪费浏览器性能。因而现今,增加Node中间层便是一种良好的解决方案。


 

16.Linux下查看80端口

  • 检测是否被占用:

  1. ps -ef |grep 80

  2. netstat -anp |grep :80

  3. lsof -i:80

  4. netstat -tunlp |grep :80

  5. netstat -an |grep :80

  • 解决80端口占用:

    先检测80端口的id

    kill -9 pid


 

17.公司有多少部门

人事部门,财务部门,推广部门,技术部,运维和测试

 

18.Python中is和==的区别

is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)

相同点:

is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同,==比较操作符和is同一性运算符区别

不同点:

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同


 

19.ETL和MATLAB的定义和用法

ETL

定义:

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据

ETL的设计分三部分:数据抽取、数据的清洗转换、数据的加载

一、 数据的抽取(Extract)

1、对于与存放DW的数据库系统相同的数据源处理方法

2、对于与DW数据库系统不同的数据源的处理方法

3、对于文件类型数据源(.txt,.xls)

4、增量更新的问题

二、数据的清洗转换(Cleaning、Transform)

通常的做法是从业务系统到ODS做清洗,将脏数据和不完整数据过滤掉,在从ODS到DW的过程中转换,进行一些业务规则的计算和聚合

1、 数据清洗

(1)不完整的数据

(2)错误的数据

(3)重复的数据

2、 数据转换

(1)不一致数据转换

(2)数据粒度的转换

(3)商务规则的计算

三、ETL日志、警告发送

1、 ETL日志

一类是执行过程日志一类是错误日志第三类日志是总体日志

2、 警告发送

ETL有几个特点

一是数据同步,它不是一次性倒完数据就拉到,它是经常性的活动,按照固定周期运行的,甚至现在还有人提出了实时ETL的概念。

二是数据量,一般都是巨大的,值得你将数据流动的过程拆分成E、T和L。


MATLAB*

定义和用途:

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理信号检测金融建模设计与分析等领域。

主要功能:

数值分析数值和符号计算工程与科学绘图控制系统的设计与仿真
数字图像处理 数字信号处理 通讯系统设计与仿真 财务与金融工程

重要功能

·MATLAB®: MATLAB 语言的单元测试框架

·Trading Toolbox™: 一款用于访问价格并将订单发送到交易系统的新产品

·Financial Instruments Toolbox™: 赫尔-怀特、线性高斯和 LIBOR 市场模型的校准和 Monte Carlo 仿真

·Image Processing Toolbox™: 使用有效轮廓进行图像分割、对 10 个函数实现 C 代码生成,对 11 个函数使用 GPU 加速

·Image Acquisition Toolbox™: 提供了用于采集图像、深度图和框架数据的 Kinect® for Windows®传感器支持

·Statistics Toolbox™: 用于二进制分类的支持向量机 (SVM)、用于缺失数据的 PCA 算法和 Anderson-Darling 拟合优度检验

·Data Acquisition Toolbox™: 为 Digilent Analog Discovery Design Kit 提供了支持包

·Vehicle Network Toolbox™: 为访问 CAN 总线上的 ECU 提供 XCP

优势特点

编辑

1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;

2) 具有完备的图形处理功能,实现计算结果和编程的可视化;

3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;

4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

应用方面

MATLAB 产品族可以用来进行以下各种工作:

●数值分析

●数值和符号计算

●工程与科学绘图

●控制系统的设计与仿真

数字图像处理技术

数字信号处理技术

●通讯系统设计与仿真

●财务与金融工程

●管理与调度优化计算(运筹学)

20.Django框架的介绍(架构)

特点

1) 重量级框架 对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。

1.提供项目工程管理的自动化脚本工具 2.数据库ORM支持(对象关系映射,英语:Object Relational Mapping) 3.模板 4.表单 5.Admin管理站点 6.文件管理 7.认证权限 8.session机制 9.缓存 2)MVT模式 有一种程序设计模式叫MVC,其核心思想是分工、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。 MVC模式说明:

M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。 V全拼为View,用于封装结果,生成页面展示的html内容。 C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

Django的MVT

M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。 V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。 T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

注:差异就在于黑线黑箭头标识出来的部分

Django的优点

1.功能完善、要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站。

2.完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。

3.强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习SQL语言即可对数据库进行操作。

4.Django先进的App设计理念: App是可插拔的,是不可多得的思想。不需要了,可以直接删除,对系统整体影响不大。

5.自带台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。

6.Django debug信息详尽: 很容易找出代码错误所在。

Django的缺点

1.大包大揽: 对于一些轻量级应用不需要的功能模块Django也包括了,不如Flask轻便。

2.过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就比较困难。

3.性能劣势: 与C, C++性能上相比,Django性能偏低,当然这是python的锅,其它python框架在流量上来后会有同样问题。

4.模板问题: django的模板实现了代码和样式完全分离,不允许模板里出现python代码,灵活度对某些程序员来说可能不够。

21.大数据的理解

大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产,大数据包括结构化、半结构化和非结构化数据,非结构化数据越来越成为数据的主要部分

小的基本单位是bit,按顺序给出所有单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。

1 Byte =8 bit

1 KB = 1,024 Bytes = 8192 bit

1 MB = 1,024 KB = 1,048,576 Bytes

1 GB = 1,024 MB = 1,048,576 KB

1 TB = 1,024 GB = 1,048,576 MB

1 PB = 1,024 TB = 1,048,576 GB

1 EB = 1,024 PB = 1,048,576 TB

1 ZB = 1,024 EB = 1,048,576 PB

1 YB = 1,024 ZB = 1,048,576 EB

1 BB = 1,024 YB = 1,048,576 ZB

1 NB = 1,024 BB = 1,048,576 YB

1 DB = 1,024 NB = 1,048,576 BB

大数据的价值体现在以下几个方面:

1)对大量消费者提供产品或服务的企业可以利用大数据进行精准营销

2) 做小而美模式的中小微企业可以利用大数据做服务转型

3) 面临互联网压力之下必须转型的传统企业需要与时俱进充分利用大数据的价值

22.2019/8月-面试题

 


 

from os import walk, getcwd

path = getcwd() # 路径 search_file_name = '1.png' # 查找的文件名

def search_file(path, file_name): ​ for dirs, _dir, file in walk(path): ​ for i in file: ​ if file_name in i: ​ print(dirs + i)

if name == 'main': ​ search_file(path, search_file_name)


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.Django-ORM

ORM (Object/Relation Mapping,简称ORM)对象映射关系程序。通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。

优点:隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。ORM使我们构造固化数据结构变得简单易行。

缺点:无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的

2.什么是进程?什么是线程?它们的区别是什么?

进程是系统中正在运行的一个程序,程序一旦运行就是进程。 线程是进程的一个实体,是进程的一条执行路径。线程是进程的一个特定执行路径。当一个线程修改了进程的资源,它的兄弟线程可以立即看到这种变化。

进程和线程的区别体现在以下几个方面:

一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。线程与进程的一个主要区别是,统一进程内的一个主要区别是,同一进程内的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时,每个线程还拥有自己的寄存器和栈,其他线程可以读写这些栈内存。

1.地址空间和其他资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其他进程内不可见。

2.通信:进程间通信IPC(管道,信号量,共享内存,消息队列),线程间可以直接独写进程数据段(如全局变量)来进程通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

3.调度和切换:线程上下文切换比进程上下文切换快得多。

4.在多线程OS中,进程不是一个可执行的实体。

3.装饰器 decorator

或称为包装器,是对函数的一种包装。它能使函数的功能得到扩充,而同时不用修改函数本身的代码。它能够增加函数执行前、执行后的行为,而不需对调用函数的代码做任何改变。

装饰器语法总结

完成一个装饰器需要两步:1.定义装饰器函数 2.在被装饰的函数定义之前加上 @装饰器

4.Python垃圾回收机制详解

一、引用计数   Python垃圾回收主要以引用计数为主,分代回收为辅。引用计数法的原理是每个对象维护一个ob_ref,用来记录当前对象被引用的次数,也就是来追踪到底有多少引用指向了这个对象,当发生以下四种情况的时候,该对象的引用计数器+1

二、标记-清除  针对循环引用的情况:我们有一个“孤岛”或是一组未使用的、互相指向的对象,但是谁都没有外部引用。换句话说,我们的程序不再使用这些节点对象了,所以我们希望Python的垃圾回收机制能够足够智能去释放这些对象并回收它们占用的内存空间。但是这不可能,因为所有的引用计数都是1而不是0。Python的引用计数算法不能够处理互相指向自己的对象。你的代码也许会在不经意间包含循环引用并且你并未意识到。事实上,当你的Python程序运行的时候它将会建立一定数量的“浮点数垃圾”,Python的GC不能够处理未使用的对象因为应用计数值不会到零。这就是为什么Python要引入Generational GC算法的原因!

三、分代回收

先给出gc的逻辑:(重点)

分配内存
-> 发现超过阈值了
-> 触发垃圾回收
-> 将所有可收集对象链表放到一起
-> 遍历, 计算有效引用计数
-> 分成 有效引用计数=0 和 有效引用计数 > 0 两个集合
-> 大于0的, 放入到更老一代
-> =0的, 执行回收
-> 回收遍历容器内的各个元素, 减掉对应元素引用计数(破掉循环引用)
-> 执行-1的逻辑, 若发现对象引用计数=0, 触发内存回收
-> python底层内存管理机制回收内存

Python中, 引入了分代收集, 总共三个”代”. Python 中, 一个代就是一个链表, 所有属于同一”代”的内存块都链接在同一个链表中 用来表示“代”的结构体是gc_generation, 包括了当前代链表表头、对象数量上限、当前对象数量。

5.TCP和UDP,以及它们的区别

TCP: 传输控制协议(英语:Transmission Control Protocol,缩写为TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

UDP:用户数据报协议(英语:User Datagram Protocol,缩写为UDP),又称使用者资料包协定,是一个简单的面向数据报的传输层协议,正式规范为RFC 768。

共同点

  • 传输层协议

不同点

  • UDP 继承 IP 的特性,不保证不丢失,不保证按顺序到达。TCP 就是提供可靠的数据,无差错、不丢失、不重复、按循序到达。

  • TCP提供有保证的数据传输,而UDP不提供

  • TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性, 但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;

  • UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号, 发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议

  • UDP 是数据格式基于数据报,一个一个的发,一个一个的收。TCP 是面向字节流,发送的是一个流数据。

  • UDP 是不处理堵塞,应用需要发,就会发送。TCP 还拥有堵塞控制,TCP 会根据网络环境调整发包的频率。

  • UDP 支持多播和广播

TCP、UDP对比:
 TCPUDP
可靠性 可靠 不可靠
连接性 面向连接 无连接
报文 面向字节流 面向报文
效率 传输效率低 传输效率高
双工性 全双工 一对一、一对多、多对一、多对多
流量控制 有(滑动窗口)
拥塞控制 有(慢开始、拥塞避免、快重传、快恢复)

6.uwsgi概念和作用

WSGI

WSGI是一种WEB服务器==网关接口==。 是一个Web服务器(如nginx)与应用服务器(如uWSGI)通信的一种规范(协议)。

在生产环境中使用WSGI作为python web的服务器。Python Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛接受。WSGI没有官方的实现, 因为WSGI更像一个协议,只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行。

uWSGI

uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。uWSGI代码完全用C编写,效率高、性能稳定。

uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型。

作用

Django 是一个 Web 框架,框架的作用在于处理 request 和 reponse,其他的不是框架所关心的内容。所以怎么部署 Django 不是 Django 所需要关心的。

Django 所提供的是一个开发服务器,这个开发服务器,没有经过安全测试,而且使用的是 Python 自带的 simple HTTPServer 创建的,在安全性和效率上都是不行的

而uWSGI 是一个全功能的 HTTP 服务器,他要做的就是把 HTTP 协议转化成语言支持的网络协议。比如把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用。

uwsgi 是一种 uWSGI 的内部协议,使用二进制方式和其他应用程序进行通信。

7.进程间的通信机制

套接字:套接字socket,由目标计算机的IP地址和进程的端口号组成

共享内存:由一个进程创建,但是多个进程可以访问

消息队列:存放在内核中的消息链表

信号:向接收进程通知某个事件已经发生

信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源

管道:半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

有名管道:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信

8.nginx和uwsgi的区别和作用

  1. nginx是对外的服务器,外部浏览器通过url访问nginx, uwsgi是对内的服务器,主要用来处理动态请求。

  2. nginx接收到浏览器发送过来的http请求,将包进行解析,分析url,

    a.如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件,

    b.如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi,

 uwsgi接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,
wsgi根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将
返回值再次交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接收的格式,
uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。

nginx默认的路径

cd /usr/local/etc/nginx/servers

9.mysql 四种隔离级别

事务的 四个特征(ACID)

事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。

1 、原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

2 、一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。

3 、隔离性。一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4 、持续性。也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

Mysql的四种隔离级别

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

Read Uncommitted(读取未提交内容)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Read Committed(读取提交内容)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

Repeatable Read(可重读)

这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化)

这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

10.Python PIL

PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。其官方主页为:PIL。 PIL历史悠久,原来是只支持python2.x的版本的,后来出现了移植到python3的库pillow,pillow号称是friendly fork for PIL,其功能和PIL差不多,但是支持python3

GIL全局锁

 

11.Django框架工作流程(Python)

1、浏览器发送请求request给web服务器;

2、web服务器将请求转发给Django框架处理; (Django接收到第一个请求,会调用中间件的init方法,完成中间件的初始化)

3、处理请求前调用proces_request(request),返回None或HttpResponse对象;

4、通过URLconf匹配,确认请求由哪个视图处理;

5、process_view(request,view_func,view_args,view_kwargs)在处理视图前调用,返回None或HttpResponse对象;

6、视图接收到resquest;

(1) 通过模型model与数据库交互,获取并处理数据,Model内嵌ORM框架,实现面向对象来操作数据库; (2) 模板引擎,实现动态展示数据,返回HttpResponse对象或者JsonResponse对象。

7、视图处理响应后返回response,所有的response(包括process_request和process_view返回的response)在返回给Django前都会调用process_response(request,response),返回HttpResponse对象,除非做了特殊处理。(如果视图抛出异常,在每个请求上调用precess_exception(request,exception),返回None或HttpResponse对象。)

12.Linux

Linux 10个主流发行版本

Ubuntu,Linux MintPCLinuxOS是其中最易用使用的。想快速部署使用,就可以选择这几个。尤其对于新手,已经做到了和Windows类似的易用程度了。另一方面,Slackware Linux,Arch LinuxFreeBSD是更激进的发行版,更新比较频繁,所以需要有一定的基础。不然,哪天搞崩了都不知道问题所在。 openSUSE,Fedora,Debian GNU/LinuxMageia则是比较保守的发行版。稳定性是他们的特点。但是软件包都比较旧。很多桌面版本的新功能没法用。CentOS是一个企业级的发行版,适合那些喜欢稳定性,可靠性和软件长期支持的用户。

Linux下查看内存使用情况方法总结

1. /proc/meminfo

cat /proc/meminfo

查看RAM使用情况最简单的方法是通过/proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo列出了所有你想了解的内存的使用情况。进程的内存使用信息也可以通过/proc/<pid>/statm 和 /proc/<pid>/status 来查看。

2. atop

sudo atop

atop命令是一个终端环境的监控命令。它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注

3. free

free -h

free命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。

4. GNOME System Monitor

gnome-system-monitor

GNOME System Monitor 是一个显示最近一段时间内的CPU、内存、交换区及网络的使用情况的视图工具。它还提供了一种查看CPU及内存使用情况的方法。

5. htop

htop

htop命令显示了每个进程的内存实时使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。列表可以水平及垂直滚动。

6. ps

ps aux --sort -rss

ps命令可以实时的显示各个进程的内存使用情况。Reported memory usage information includes %MEM (percent of physical memory used), VSZ (total amount of virtual memory used), and RSS (total amount of physical memory used)

7. top

top命令提供了实时的运行中的程序的资源使用统计

13.Flask和Django区别

Flask:

1:轻量级web框架,只有一个内核,默认依赖两个外部库:Jinja2 模板引擎和 Werkzeug WSGI 工具集,自由,灵活,可扩展性强,开发者可以根据需求自己造轮子
2:适用于做小型网站以及web服务的API,开发大型网站无压力,架构需自行设计
3:与关系型数据库结合不弱于Django,而与非关系型数据库的结合远远优于Django

Django:

1:重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择应用上花费大量时间
2:自带ORM(Object-Relational Mapping 对象关联映射)和模板引擎,支持JinJa等非官方模板引擎,灵活度不高
3:自带ORM使Django和关系型数据库耦合度过高,如果要使用非关系型数据库,需要使用第三方库
4:自带数据库管理app
5:成熟、稳定、开发效率高、相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发
6:python web框架的先驱,第三方库丰富
7:上手容易,开发文档详细、完善、资料丰富

14.Linux命令

  1. 编辑vi/vim(i, a,o)

  2. 保存退出:wq回车 不保存退出:w!回车 强制退出:q回车

  3. 单行:yy粘贴 p复制 多行:shift+v+行数 shift+y+p

  4. 剪切:复制--->删除--->粘贴

  5. 撤销:u(返回上一步操作) ctrl+r(反撤销)

  6. 单个替换:

    • 单字符替换:移动到指定位置+r+%s/<new>/<hello>/g 新字符

    • 替换一个词:%s/新字符被替换的词/新词/g

    • a:替换所有 c:局部替换 q:结束本次替换

  7. 块操作:范围+shift+V+上下键选取 复制一页:光标移到要复制字符的段首或尾+ctrl+v+左右+y

  8. 跳转:跳转到文件首:gg/home/^ 文件尾部:G/end/$

  9. JK上下 HL左右

  10. 设置编号:setnu 去除编号:setnonu

  11. 定位错误行:vi+文件+空格+行号

  12. 查找:进入末行模式 /<key>/回车

  13. 窗口分割:sp<filename> 上下分割窗口,同时打开另一个文件 vs<filenname>左右分割,同时打开新文件

  14. 查看隐藏文件:ll -a


15.前后端分离架构概述

前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。

核心思想是前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互。
Web服务器:一般指像Nginx,Apache这类的服务器,他们一般只能解析静态资源;
应用服务器:一般指像Tomcat,Jetty,Resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好;一般都是只有web服务器才能被外网访问,应用服务器只能内网访问。

前端:负责View和Controller层。 后端:只负责Model层,业务/数据处理等。

可是服务端人员对前端HTML结构不熟悉,前端也不懂后台代码呀,controller层如何实现呢?这就是node.js的妙用了,node.js适合运用在高并发、I/O密集、少量业务逻辑的场景。最重要的一点是,前端不用再学一门其他的语言了,对前端来说,上手度大大提高

可以就把Nodejs当成跟前端交互的api。总得来说,Nodejs的作用在mvc中相当于C(控制器)。Nodejs路由的实现逻辑是把前端静态页面代码当成字符串发送到客户端(例如浏览器),简单理解可以理解为路由是提供给客户端的一组api接口,只不过返回的数据是页面代码的字符串而已。

用NodeJs来作为桥梁架接服务器端API输出的JSON。后端出于性能和别的原因,提供的接口所返回的数据格式也许不太适合前端直接使用,前端所需的排序功能、筛选功能,以及到了视图层的页面展现,也许都需要对接口所提供的数据进行二次处理。这些处理虽可以放在前端来进行,但也许数据量一大便会浪费浏览器性能。因而现今,增加Node中间层便是一种良好的解决方案。


 

16.Linux下查看80端口

  • 检测是否被占用:

  1. ps -ef |grep 80

  2. netstat -anp |grep :80

  3. lsof -i:80

  4. netstat -tunlp |grep :80

  5. netstat -an |grep :80

  • 解决80端口占用:

    先检测80端口的id

    kill -9 pid


 

17.公司有多少部门

人事部门,财务部门,推广部门,技术部,运维和测试

 

18.Python中is和==的区别

is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)

相同点:

is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同,==比较操作符和is同一性运算符区别

不同点:

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同


 

19.ETL和MATLAB的定义和用法

ETL

定义:

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据

ETL的设计分三部分:数据抽取、数据的清洗转换、数据的加载

一、 数据的抽取(Extract)

1、对于与存放DW的数据库系统相同的数据源处理方法

2、对于与DW数据库系统不同的数据源的处理方法

3、对于文件类型数据源(.txt,.xls)

4、增量更新的问题

二、数据的清洗转换(Cleaning、Transform)

通常的做法是从业务系统到ODS做清洗,将脏数据和不完整数据过滤掉,在从ODS到DW的过程中转换,进行一些业务规则的计算和聚合

1、 数据清洗

(1)不完整的数据

(2)错误的数据

(3)重复的数据

2、 数据转换

(1)不一致数据转换

(2)数据粒度的转换

(3)商务规则的计算

三、ETL日志、警告发送

1、 ETL日志

一类是执行过程日志一类是错误日志第三类日志是总体日志

2、 警告发送

ETL有几个特点

一是数据同步,它不是一次性倒完数据就拉到,它是经常性的活动,按照固定周期运行的,甚至现在还有人提出了实时ETL的概念。

二是数据量,一般都是巨大的,值得你将数据流动的过程拆分成E、T和L。


MATLAB*

定义和用途:

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理信号检测金融建模设计与分析等领域。

主要功能:

数值分析数值和符号计算工程与科学绘图控制系统的设计与仿真
数字图像处理 数字信号处理 通讯系统设计与仿真 财务与金融工程

重要功能

·MATLAB®: MATLAB 语言的单元测试框架

·Trading Toolbox™: 一款用于访问价格并将订单发送到交易系统的新产品

·Financial Instruments Toolbox™: 赫尔-怀特、线性高斯和 LIBOR 市场模型的校准和 Monte Carlo 仿真

·Image Processing Toolbox™: 使用有效轮廓进行图像分割、对 10 个函数实现 C 代码生成,对 11 个函数使用 GPU 加速

·Image Acquisition Toolbox™: 提供了用于采集图像、深度图和框架数据的 Kinect® for Windows®传感器支持

·Statistics Toolbox™: 用于二进制分类的支持向量机 (SVM)、用于缺失数据的 PCA 算法和 Anderson-Darling 拟合优度检验

·Data Acquisition Toolbox™: 为 Digilent Analog Discovery Design Kit 提供了支持包

·Vehicle Network Toolbox™: 为访问 CAN 总线上的 ECU 提供 XCP

优势特点

编辑

1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;

2) 具有完备的图形处理功能,实现计算结果和编程的可视化;

3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;

4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

应用方面

MATLAB 产品族可以用来进行以下各种工作:

●数值分析

●数值和符号计算

●工程与科学绘图

●控制系统的设计与仿真

数字图像处理技术

数字信号处理技术

●通讯系统设计与仿真

●财务与金融工程

●管理与调度优化计算(运筹学)

20.Django框架的介绍(架构)

特点

1) 重量级框架 对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。

1.提供项目工程管理的自动化脚本工具 2.数据库ORM支持(对象关系映射,英语:Object Relational Mapping) 3.模板 4.表单 5.Admin管理站点 6.文件管理 7.认证权限 8.session机制 9.缓存 2)MVT模式 有一种程序设计模式叫MVC,其核心思想是分工、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。 MVC模式说明:

M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。 V全拼为View,用于封装结果,生成页面展示的html内容。 C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

Django的MVT

M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。 V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。 T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

注:差异就在于黑线黑箭头标识出来的部分

Django的优点

1.功能完善、要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站。

2.完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。

3.强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习SQL语言即可对数据库进行操作。

4.Django先进的App设计理念: App是可插拔的,是不可多得的思想。不需要了,可以直接删除,对系统整体影响不大。

5.自带台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。

6.Django debug信息详尽: 很容易找出代码错误所在。

Django的缺点

1.大包大揽: 对于一些轻量级应用不需要的功能模块Django也包括了,不如Flask轻便。

2.过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就比较困难。

3.性能劣势: 与C, C++性能上相比,Django性能偏低,当然这是python的锅,其它python框架在流量上来后会有同样问题。

4.模板问题: django的模板实现了代码和样式完全分离,不允许模板里出现python代码,灵活度对某些程序员来说可能不够。

21.大数据的理解

大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产,大数据包括结构化、半结构化和非结构化数据,非结构化数据越来越成为数据的主要部分

小的基本单位是bit,按顺序给出所有单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。

1 Byte =8 bit

1 KB = 1,024 Bytes = 8192 bit

1 MB = 1,024 KB = 1,048,576 Bytes

1 GB = 1,024 MB = 1,048,576 KB

1 TB = 1,024 GB = 1,048,576 MB

1 PB = 1,024 TB = 1,048,576 GB

1 EB = 1,024 PB = 1,048,576 TB

1 ZB = 1,024 EB = 1,048,576 PB

1 YB = 1,024 ZB = 1,048,576 EB

1 BB = 1,024 YB = 1,048,576 ZB

1 NB = 1,024 BB = 1,048,576 YB

1 DB = 1,024 NB = 1,048,576 BB

大数据的价值体现在以下几个方面:

1)对大量消费者提供产品或服务的企业可以利用大数据进行精准营销

2) 做小而美模式的中小微企业可以利用大数据做服务转型

3) 面临互联网压力之下必须转型的传统企业需要与时俱进充分利用大数据的价值 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-08-22 11:20  陈文鑫  阅读(236)  评论(0编辑  收藏  举报