公司名称:神州数据系统集成服务有限公司 注册规模:1000-9999人 公司地址:西安市雁塔区神州数码科技园 公司图片: 面试过程: 1、Linux命令 cd ls chmodchown mkdir cp mv grep cat find 2、简单说一下多线程 多任务可以由多进程完成,也可以由一个进程内的多线程完成。调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在一个进程至少有一个 线程,叫主线程,而多个线程共享内存(数据共享,共享全局变量),从而极大地提高了程序的运行效率。 3、创建两个线程,其中一个输出1-52,另外一个输出A-Z。输出格式要求:12A 34B 56C 78D import threading import time # 大致思路 # 获取对方的锁,运行一次后,释放自己的锁 def show1(): for i in range(1, 52, 2): lock_show2.acquire() print(i, end='') print(i+1, end='') time.sleep(0.2) lock_show1.release() def show2(): for i in range(26): lock_show1.acquire() print(chr(i + ord('A'))) time.sleep(0.2) lock_show2.release() lock_show1 = threading.Lock() lock_show2 = threading.Lock() show1_thread = threading.Thread(target=show1) show2_thread = threading.Thread(target=show2) lock_show1.acquire() # 因为线程执行顺序是无序的,保证show1()先执行 show1_thread.start() show2_thread.start()
4、说一下is 和==的区别 is 判断的是 a对象是否就是 b对象,是通过 id来判断的。 ==判断的是 a对象的值是否和b对象的值相等,是通过 value 来判断的。
5、深拷贝与浅拷贝区别 一、赋值 在Python中,对象的赋值就是简单的对象引用,这点和C++不同,如下所示: 16.a = [1,2,"hello",['python', 'C++']] 17.b = a 在上述情况下,a和b是一样的,他们指向同一片内存,b不过是a的别名,是引用。 我们可以使用bisa 去判断,返回True,表明他们地址相同,内容相同,也可以使用id()函数来查 看两个列表的地址是否相同。 赋值操作(包括对象作为参数、返回值)不会开辟新的内存空间,它只是复制了对象的引用。也就是 说除了b这个名字之外,没有其他的内存开销。修改了a,也就影响了b,同理,修改了b,也就影响 了a。 二、浅拷贝(shallow copy) 浅拷贝会创建新对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用。 浅拷贝有三种形式:切片操作、工厂函数、copy模块中的copy函数。 比如上述的列表a; 切片操作:b = a[:] 或者 b = [x for x in a]; 工厂函数:b = list(a); copy函数:b = copy.copy(a); 浅拷贝产生的列表b不再是列表a了,使用is判断可以发现他们不是同一个对象,使用id查看, 他们也不指向同一片内存空间。但是当我们使用id(x) for x in a和 id(x) for x in b来查看a和b 中元 素的地址时,可以看到二者包含的元素的地址是相同的。 在这种情况下,列表a和b是不同的对象,修改列表b理论上不会影响到列表a。 但是要注意的是,浅拷贝之所以称之为浅拷贝,是它仅仅只拷贝了一层,在列表a中有一个嵌套的 list,如果我们修改了它,情况就不一样了。 比如:a[3].append('java')。查看列表b,会发现列表b也发生了变化,这是因为,我们修改了嵌 套的list,修改外层元素,会修改它的引用,让它们指向别的位置,修改嵌套列表中的元素,列表的地 址并未发生变化,指向的都是用一个位置。 三、深拷贝(deep copy) 深拷贝只有一种形式,copy模块中的deepcopy()函数。 深拷贝和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。因此,它的时间和空 间开销要高。 同样的对列表a,如果使用 b = copy.deepcopy(a),再修改列表b将不会影响到列表a,即使嵌 套的列表具有更深的层次,也不会产生任何影响,因为深拷贝拷贝出来的对象根本就是一个全新的对象, 不再与原来的对象有任何的关联。 四、拷贝的注意点? 对于非容器类型,如数字、字符,以及其他的“原子”类型,没有拷贝一说,产生的都是原对象的 引用。 如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝。 5、输入某年某月某日,判断这一天是这一年的第几天?( import datetime def dayofyear(): year = input("请输入年份:") month = input("请输入月份:") day = input("请输入天:") date1 =datetime.date(year=int(year), month=int(month), day=int(day)) date2 = datetime.date(year=int(year), month=1,day=1) return(date1 - date2 + 1).days 6、如何用Python来进行查询和替换一个文本字符串? 可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0]) replacement是被替换成的文本 string是需要被替换的文本
count是一个可选参数,指最大被替换的数量
|