爱数科技python开发岗面试

爱数科技python开发岗,把自己面试收获给大家分享下

  • 面试的题目
    • 说一下TCP和UDP的区别?
    • 说一下GIL的全局解释锁?
    • Linux操作系统有什么特点?
    • Linux的常用命令,简述下功能
    • 进程和线程的区别
    • is 和==的区别
    • 简述下Djiango框架
    • Djiango和flask的区别
    • SQL语句的增删改查
    • 如果用rm -rf 误删了,该怎麽办
    • 平时代码debug的方法
    • 概括

面试的题目

说一下TCP和UDP的区别?

  1. TCP与UDP基本区别
    1.基于连接与无连接
    2.TCP要求系统资源较多,UDP较少;
    3.UDP程序结构较简单
    4.流模式(TCP)与数据报模式(UDP);
    5.TCP保证数据正确性,UDP可能丢包
    6.TCP保证数据顺序,UDP不保证
  2. UDP应用场景:
    1.面向数据报方式
    2.网络数据大多为短消息
    3.拥有大量Client
    4.对数据安全性无特殊要求
    5.网络负担非常重,但对响应速度要求高
  3. 具体编程时的区别
    1.socket()的参数不同
      2.UDP Server不需要调用listen和accept
      3.UDP收发数据用sendto/recvfrom函数
      4.TCP:地址信息在connect/accept时确定
      5.UDP:在sendto/recvfrom函数中每次均 需指定地址信息
      6.UDP:shutdown函数无效
     
    这是我大概的总结,具体的请点击链接https://blog.csdn.net/Li_Ning_/article/details/52117463

说一下GIL的全局解释锁?

解释下对gil解释锁理解
GIL 又叫全局解释器锁,首先说一点,Python语言与GIL全局解释器锁没有关系,仅仅是因为历史原因,在cpython解释器中还存在GIL难以移除。GIL是功能与性能权衡后的产物,它有着存在的合理性,也有着难以移除的历史客观因素。

为什么存在GIL?
  在早期的开发过程中,因为物理因素限制,从最开始的单核CPU发展为多核CPU, 想要充分发挥多核CPU的性能需要利用到多线程编程,Python中同样引入了多线程编程,而多线程编程引入带来的问题是:线程之间数据的一致性和状态同步的问题。 而想解决这些问题最好的方法就是加一把锁,所以就有了GIL全局解释器锁这样一把大锁。

随着越来越多的代码库开发者接受GIL,而后逐渐大量依赖于这一特性进行开发,到最后发现GIL对多核CPU多线程编程的效率是低效影响的时候,想要移除这一特性,却发现已经很难了。
详细连接
https://blog.csdn.net/ahilll/article/details/83892996

Linux操作系统有什么特点?

**1、完全免费 **
  Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变。这让Linux吸收了无数程序员的精华,不断壮大。
**2、完全兼容POSIX 1.0标准 **
  这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
**3、多用户、多任务 **
  Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
**4、良好的界面 **
  Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X- Windows系统,用户可以使用鼠标对其进行操作。在X-Windows环境中就和在Windows中相似,可以说是一个Linux版的 Windows。
**5、丰富的网络功能 **
  互联网是在Unix的基础上繁荣起来的,Linux的网络功能当然不会逊色。它的网络功能和其内核紧密相连,在这方面Linux要优于其他操作系统。在Linux中,用户可以轻松实现网页浏览、文件传输、远程登陆等网络工作。并且可以作为服务器提供WWW、FTP、E-Mail等服务。
**6、可靠的安全、稳定性能 **
  Linux采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。Linux由于需要应用到网络服务器,这对稳定性也有比较高的要求,实际上Linux在这方面也十分出色。
**7、支持多种平台 **
  Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高

Linux的常用命令,简述下功能

1、cd命令
2、ls命令
3、grep命令
4、find命令
5、cp命令
6、mv命令
7、rm命令

详细链接
https://blog.csdn.net/ljianhui/article/details/11100625

进程和线程的区别

根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

is 和==的区别

以下对‘is’ 与‘==’的区别进行说明。

看下面例子:

>>> foo = [1]
>>> bar = [1]
>>> foo is bar # foo、bar不是同一个对象
False
>>> foo == bar # foo、bar的值相等
True
>>> id(foo) # 注意参数必须为引用,如果是对象则不符合此规则
32658856  # 不同电脑上可能结果不同
>>> id(bar)
32658696

foo、bar是两个引用,指向不同的地址空间,所以两者不相等,而foo、bar的内容相等。来看foo、bar的内存地址,两者是不一样的。
详细链接
https://blog.csdn.net/yanyunqq/article/details/12108979

简述下Djiango框架

直接上链接
https://blog.csdn.net/Despair1992/article/details/84969895

Djiango和flask的区别

1、Django是一款重量级的Python开发web框架,功能齐全,不同的人用Django来开发,开发出来的东西基本架构都是一样的,但是Flask是一个轻量级的web框架,相对来说更加灵活,每个人开发出来的东西架构可能完全不一样,
所以对于团队级别的大型项目来说,比较适合选择Django,因为整个团队比较容易达成一致的架构,不会陷入无休止的会议讨论,里面很多东西不需要自己设计,拿来即用,快速开发。
而对于个人开发的小项目来说,也可以用Django,也可以用Flask,用Flask的话,可以设计自己的项目架构,不必拘泥于Django的固定模式。但是对于经验少的开发者来说,这里就比较困难了

2、Flask对于加深Python学习有很大帮助,因为Flask不像Django很多东西都是现成的,需要自己去写

3、Django对新手来说比Flask容易上手,正是因为灵活性的原因

4、感觉选择哪个框架最后还是小马过河,一千个读者就有一千个哈姆雷特

SQL语句的增删改查


1.使用insert插入单行数据。
2.使用insert,select语句将现有表中的 数据添加到已有的新表中。


1.使用delete删除数据某些数据
2.使用truncate table 删除整个表的数据


使用update更新修改数据


查询的话比较多

详细链接
https://blog.csdn.net/a88055517/article/details/6736284

如果用rm -rf 误删了,该怎麽办

作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。所以,基本上就无法恢复该文件了。

如果磁盘上的数据没有被覆盖,如:个人学习用机,则可通过debugfs命令找到原文件所在磁盘块,采用dd命令读取相应的磁盘数据达到恢复文件的目的:

先确认所删除文件所在物理磁盘:df -v 输出结果中”Mounted on“列出的文件系统中找到自己的文件系统,查看”Filesystem “列对应的磁盘卷,假设为/dev/sda1

运行debugfs

open /dev/sda1

ls -d 被删除文件名全路径

#显示有<>尖括号的就是我们要找的文件Inode号, 执行

logdump –I

#在输出中找到 Blocks: (0+1): YYYY

quit

运行dd命令:

dd if=/dev/sda1 of=/tmp/del.txt.rev bs=4096 count=1 skip=YYYY

如果以上过程中,找不到被删除的文件块,则无法完成恢复。

平时代码debug的方法

详细链接
https://blog.csdn.net/zhusongziye/article/details/83153963

概括

  • 自己的简历上写的项目必须要清楚了解,经得住面试官的提问。所以建议大家面试前在自己项目方面多准备。自己对一些基础知识还有些欠缺,所以应该没希望了,希望这篇博客能帮助准备面试的其他人。

以上时我本人在这次面试爱数所遇到的题目,在网上还有其他人在面试过程中的一些问题:

  • python 2 与python 3的区别
  • python代码的优点/缺点
  • 中序遍历非递归实现
  • 数据库三大范式
  • python的垃圾回收机制

你可能感兴趣的:(面试)