本帖最后由 就业高冷派 于 2018-10-22 11:27 编辑
公司名称:北京华科软科技有限公司西安分部 公司经营范围包括许可经营项目:水利电力行业的计算机软件开发,包括工程项目管理系统开发,办公自动化系统开发;计算机信息系统集成;工程三维仿真技术开发;工程施工监控及自动化等技术开发;以及网络建设、系统集成、互联网经营、电子商务等业务 注册资金:800万 公司地址:高新区都市之门C座 公司图片: 人事小姐姐先进来聊了几句,大概内容无非就是了解一下性格呀,就普通聊天,也问到上家公司的一些情况,涉及到业务内容的都简单带过,有问到离职原因,这个自己可以结合自己的情况说一个。 人事简单聊完,等了一会来了一个技术组长,有问到一些问题,简单整理如下:
Q:python中可变数据类型和不可变数据类型你清楚不,能简述一下原理吗? A:不可变数据类型:数值型、字符串型string和元组tuple 不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址),如下图用id()方法可以打印对象的id 可变数据类型:列表list和字典dict; 允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。 Q:单例模式的应用场景有哪些? A:单例模式应用的场景一般发现在以下条件下: (1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置。 (2)控制资源的情况下,方便资源之间的互相通信。如线程池等。 1.网站的计数器 2.应用配置 3.多线程池 4. 数据库配置,数据库连接池 5.应用程序的日志应用.... Q:解释一下什么是闭包? A:在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为 闭包。 A:迭代器是一个更抽象的概念,任何对象,如果它的类有 next 方法和 iter 方法返回自己本身,对于 string、list、dict、tuple 等这类容器对象,使用 for 循环遍历是很方便的。在后台 for 语句对容器对象调用 iter()函数,iter()是 python 的内置函数。iter()会返回一个定义了 next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是 python 的内置函数。在没有后续元素时,next()会抛出一个 StopIteration 异常。 生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用 yield 语句。每次 next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值) 区别:生成器能做到迭代器能做的所有事,而且因为自动创建了 iter()和 next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出 StopIteration 异常。 Q:Python 里 match 与 search 的区别? A:match()函数只检测 RE 是不是在 string 的开始位置匹配,search()会扫描整个 string 查找匹配;也就是说 match()只有在 0 位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回 none。 Q:谈谈你对多进程,多线程,以及协程的理解,项目是否用? A:这个问题被问的概率相当之大,其实多线程,多进程,在实际开发中用到的很少,除非是那些对项目性能要求特别高的,有的开发工作几年了,也确实没用过,你可以这么回答,给他扯扯什么是进程,线程(cpython 中是伪多线程)的概念就行,实在不行你就说你之前写过下载文件时,用过多线程技术,或者业余时间用过多线程写爬虫,提升效率。 进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享,开销大。 线程: 调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在一个进程至少有一个线程,叫主线程,而多个线程共享内存(数据共享,共享全局变量),从而极大地提高了程序的运行效率。 协程:是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。 Q:什么是多线程竞争? A:线程是非独立的,同一个进程里线程是数据共享的,当各个线程访问数据资源时会出现竞争状态即:数据几乎同步会被多个线程占用,造成数据混乱 ,即所谓的线程不安全那么怎么解决多线程竞争问题?-- 锁. 锁的好处:确保了某段关键代码(共享数据资源)只能由一个线程从头到尾完整地执行能解决多线程资源竞争下的原子操作问题。 锁的坏处:阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了锁的致命问题:死锁。 Q:解释一下什么是锁,有哪几种锁? A:锁(Lock)是 Python 提供的对线程控制的对象。有互斥锁、可重入锁、死锁。 后面还针对锁简单聊了下,问题不难。难的是要营造一个比较好的聊天环境,切记不能将面试氛围搞的一问一答特别死板。如果你的面试官是比较沉闷的那种性格,你要尝试性去沟通,带动聊天氛围。总结一下,本次的面试过程还是挺愉快的,谈到薪资这块能给到7+,周末双休 任务不是很重。最后还是预祝小伙伴们能够找到一个比较好的工作吧!
|