阿里第二次电面

1. 垃圾回收机制

2.死锁

3.跟ipv6相关的技术

4. 项目里面是怎么读取到邮件的?用了哪些库?

5.职业规划

6.tcp如何建立连接

7.指针

8.java 和python各自的优点

9.yeiled的使用

Java死锁:进程循环等待它方占有的资源而无限制的僵持下去的局面。

      同步代码块中都去争夺同一资源,互不相让。举个例子,在一条东西方向的狭窄的巷道中,AB两车相遇,互补退让,结果是两个车都走不了,这就是死锁。这里隐含了一个情景就是,A车占有东边这一段道路,它需要B车让出B车占有西边的道路,而同时B车占有西边的道路,它需要A车让出A车所占有的西边的道路。两车各自占有各自的资源,且同时争夺对方占有的资源,互补相让,就造成了死锁。

     在死锁时,线程间相互等待资源,而又不释放自身的资源,导致无穷无尽的等待,其结果是系统任务永远无法执行完成。死锁问题是在多线程开发中应该坚决避免和杜绝的问题。

消除死锁的几种方式:

1. 最简单、最常用的方法就是进行系统的重新启动,不过这种方法代价很大,它意味着在这之前所有的进程已经完成的计算工作都将付之东流,包括参与死锁的那些进程,以及未参与死锁的进程;

2. 撤消进程,剥夺资源。终止参与死锁的进程,收回它们占有的资源,从而解除死锁。这时又分两种情况:一次性撤消参与死锁的全部进程,剥夺全部资源;或者逐步撤消参与死锁的进程,逐步收回死锁进程占有的资源。一般来说,选择逐步撤消的进程时要按照一定的原则进行,目的是撤消那些代价最小的进程,比如按进程的优先级确定进程的代价;考虑进程运行时的代价和与此进程相关的外部作业的代价等因素;

3. 进程回退策略,即让参与死锁的进程回退到没有发生死锁前某一点处,并由此点处继续执行,以求再次执行时不再发生死锁。虽然这是个较理想的办法,但是操作起来系统开销极大,要有堆栈这样的机构记录进程的每一步变化,以便今后的回退,有时这是无法做到的。

关键字:synchronized ;执行了锁所属对象的wait()方法,这个线程会释放锁;加锁和释放锁的时候一定要通过try-finally的方式来操作,防止在加锁之后程序异常退出没有调用 lock.unlock() 方法释放锁

避免死锁的一个通用的经验法则是:当几个线程都要访问共享资源A、B和C时,保证使每个线程都按照同样的顺序去访问他们,比如都先访问A,再访问B和C。

---------------------------------------------------------------------------------------------------------------------------------

yield

(1)在python中:

一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

python中生成器是迭代器的一种,使用yield返回函数值。每次调用yield会暂停,而可以使用next()函数和send()函数可以恢复生成器。

(2)Java线程中的Thread.yield( )方法:

Thread.yield( )方法即为线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,

让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程。

        yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!举个例子:现在有很多人在排队上厕所,好不容易轮到这个人上厕所了,突然这个人说:“我要和大家来个竞赛,看谁先抢到厕所!”,然后所有的人在同一起跑线冲向厕所,有可能是别人抢到了,也有可能他自己有抢到了。我们还知道线程有个优先级的问题,那么手里有优先权的这些人就一定能抢到厕所的位置吗? 不一定的,他们只是概率上大些,也有可能没特权的抢到了。

----------------------------------------------------------------------------------------------------------------------------------

java 和python各自的优点

1. Python作为动态语言,很灵活。语法简洁,表达力强。语法简洁优美, 功能强大, 标准库跟第三方库灰常强大, 应用领域非常广Python可以让初学者把精力集中在编程对象和思维方法上,而不用去担心语法、类型等等外在因素;

yield关键字:
当你需要返回很多东西然后一个一个用的时候, 你可以一次返回一个, 相当于一个生成器,可以用来返回函数值。
def xrange(n):
      i = 0
      while i < n:
          yield i
          i += 1
用法:
for i in xrange(10):
     print i

2. java 优美, 严谨, 健壮,不易出错(尽量避免了程序员犯错, 比如自动垃圾回收, 抛弃无符号类型, 安全的枚举, 编译期泛型检查等等);

----------------------------------------------------------------------------------------------------------------------------------

项目里面是怎么读取到邮件的?用了哪些库?

调用win32com里面的outlook接口,

import win32com.client
然后调用里面的getTemplate()方法
def getTemplate(self, sheet, updateFlag = True)



关于selenium:
调用selenium模块下的webdriver,
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from xml.etree import ElementTree as ET
import os,time, shutil, re
from __builtin__ import classmethod
from datetime import datetime

利用装饰器下的一个函数来规定浏览器下载文件后存放的位置;webdriver下的options方法来定义了一个startChrom()函数;

登录函数:

def login(self, user, password):      
    self.driver.find_element_by_id("user").clear()
    self.driver.find_element_by_id("user").send_keys(user)
    self.driver.find_element_by_id("password").clear()
    self.driver.find_element_by_id("password").send_keys(password)
    self.driver.find_element_by_id("IMAGE1").click()
    try:
        WebDriverWait(self.driver, 10).until(EC.visibility_of_any_elements_located((By.LINK_TEXT,"Activation")))
    except Exception as e:
        print e.message
        return False
    else:
        return True



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值