58同城笔试--线程面试题

1.线程的基本概念 ,线程的基本状态及状态之间的关系

线程:线程有时称为轻量级进程,是 CPU使用的基本单元;它由线程ID,程序计数器,寄存器和堆栈组成

线程的基本状态:新生状态,可运行状态,被阻塞状态,死亡状态;状态之间转化如下

创建线程,并调用start方法后线程进入就绪状态,线程调度系统将就绪状态转化为运行状态;遇到synchronized语句时,由运行状态转为阻塞状态,当synchronized获得锁后,由阻塞转化为运行

2.多线程同步和互斥有几种方法,都是什么?

线程之间通信涉及到:

(1)线程之间如何传递信息

(2)线程之间如何同步,以使一个线程的活动不会破坏 另一个线程的活动

(3)当线程有依赖关系时,如何调度多个线程的处理顺序

(4)如何避免死锁问题

线程间通信方式:

(1)互斥锁:通过锁机制实现线程间的同步,同一时刻只允许一个线程执行一个关键部分的代码

  1. 初始化锁。在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。
    静态分配:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
    动态分配:int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex_attr_t *mutexattr);
  2. 加锁。对共享资源的访问,要对互斥量进行加锁,如果互斥量已经上了锁,调用线程会阻塞,直到互斥量被解锁。
    int pthread_mutex_lock(pthread_mutex *mutex);
    int pthread_mutex_trylock(pthread_mutex_t *mutex);
  3. 解锁。在完成了对共享资源的访问后,要对互斥量进行解锁。
    int pthread_mutex_unlock(pthread_mutex_t *mutex);
  4. 销毁锁。锁在是使用完成后,需要进行销毁以释放资源。
    int pthread_mutex_destroy(pthread_mutex *mutex);

(2)条件变量:条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足,条件变量时用来等待的而不是上锁的;条件变量 用来自动阻塞一个线程,直到某特殊情况发生为止。

(3)信号量:如同进程一样,线程也可以通过信号量实现通信,虽然是轻量级的

P:申请资源如果sv的值大于1,就给它减1,如果它的值为0,就挂起该进程

V:临界资源累加,如果其他进程因等待sv被挂起,就让他恢复运行,如果进程没有因等待sv而被挂起,就给他加1

  1. 信号量初始化。
    int sem_init (sem_t *sem , int pshared, unsigned int value);
    这是对由sem指定的信号量进行初始化,设置好它的共享选项(linux 只支持为0,即表示它是当前进程的局部信号量),然后给它一个初始值VALUE。
  2. 等待信号量。给信号量减1,然后等待直到信号量的值大于0。
    int sem_wait(sem_t *sem);
  3. 释放信号量。信号量值加1。并通知其他等待线程。
    int sem_post(sem_t *sem);
  4. 销毁信号量。我们用完信号量后都它进行清理。归还占有的一切资源。
    int sem_destroy(sem_t *sem);

4.多线程的同步与互斥有何异同,什么情况下分别使用他们?


线程同步是指线程之间具有一种制约关系,一个线程的执行依赖于另一个线程的消息,当它没有得到另一个线程的消息是应等待,直到消息到达时才被唤醒;

线程互斥 是对共享的进程系统资源,在各个单线程访问时的排他性,若有若干个线程都要使用某一共享资源。任何时刻最多只允许一个线程去使用它,其他使用该资源的线程必须等待,直到占用资源者释放该资源,,线程互斥可以看做一种特殊的线程同步;

5.线程与进程的区别?

联系 :

一个线程 可以创建和撤销另一个线程;同一进程中的多个线程可以并发执行;线程可以与 同进程的其他线程共享数据 ,但拥有自己的栈空间 ,拥有独立运行的序列。

区别:

进程 和线程的主要区别就是他们是不同的操作系统管理方式。进程拥有 独立的地址空间 ,一个进程奔溃后,在保护模式下不会对其他进程造成影响,线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉。所以多进程的程序要比多线程的程序健壮性高;但是在切换时,资源消耗较大,效率要差一些。但对于要求 同时进行并且共享某些变量的并发操作,只能用现成不能用进程;

总结 :

(1)一个程序至少有一个进程,一个进程至少有一个线程

(2)线程的划分尺度 小于进程,使得多线程程序的并发性高

(3)进程在执行过程中拥有独立的内存单元,而多个线程是共享内存的,极大的提高了程序运行效率

(4)线程在执行过程中每个线程拥有一个程序运行的入口,顺序执行序列和程序出口;但是线程不能独立执行,必须依存在进程中;

优缺点:线程和进程在使用上各有优缺点线程执行开销少,但不利于资源管理和保护 ,而进程则相反。同时进程可以 跨机器迁移

时间: 2024-10-10 01:57:43

58同城笔试--线程面试题的相关文章

58同城2015校招笔试、一面、二面经历

10.18 宣讲 58宣讲时间真是安排的晚...19.30开始,我6.30就到了..整整放了1个小时不重复的视频.....我听完他们CSO对行业和公司的介绍就走了.感觉58可能是o2o的下一个爆发点.感觉蛮有前景的.宣讲会也是和小米的宣讲差不多,过道上都挤满了人这种.我个人还是比较些向往去58的.个人感觉对于O2O,58算是赶了个早集..把最脏最累的活给做了..反而是美团,大众点评这种抓住了热点...当然,未来的大趋势也是O2O,就看58能不能赶上这趟快车了. 10.19 笔试 昨天的唯品会和中

58同城笔试题

<!DOCTYPE html> <html> <head> <style type="text/css"> .row{ width: 100%; height: 300px; padding:3px; } .col{ float: left; width: 100%; height: 100%; border: 1px solid #fff; box-sizing: border-box; background-color: #ccc;

转: 58同城高性能移动Push推送平台架构演进之路

转: http://geek.csdn.net/news/detail/58738 文/孙玄 本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问题分析解决,以及高可用.高性能.高稳定性如何保证. 什么是移动Push推送 移动Push推送是移动互联网最基础的需求之一,用于满足移动互联环境下消息到达App客户端.以转转(58赶集旗下真实个人的闲置交易平

Java线程面试题合集(含答案)

来源:Java线程面试题 下面是我自己收集整理的Java线程相关的面试题,可以用它来好好准备面试. 参考文档: <Java核心技术 卷一> Java线程面试题 Top 50:http://www.importnew.com/12773.html JAVA多线程和并发基础面试问答: http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-answers/ 15个顶级Java多线程面试题及回答:http:

Java线程面试题 Top 50

原文链接: javarevisited 翻译: ImportNew.com- 李 广译文链接: http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程

【转】Java线程面试题Top50

目录(?)[-] 50道Java线程面试题 1 什么是线程 2 线程和进程有什么区别 3 如何在Java中实现线程 4 用Runnable还是Thread 6 Thread 类中的start 和 run 方法有什么区别 7 Java中Runnable和Callable有什么不同 8 Java中CyclicBarrier 和 CountDownLatch有什么不同 9 Java内存模型是什么 10 Java中的volatile 变量是什么 11 什么是线程安全Vector是一个线程安全类吗 详见这

疯狂Java学习笔记(59)-----------50道Java线程面试题

50道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒.Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点.欲了解更多详细信息请点击这里. 2) 线程和进程有什么区别? 线程是进程的子集,一个

秉持H2H理念,58同城如何在移动互联网时代开拓市场

移动互联网时代汹涌而来,Human to Human的这一时代落点会给58同城带来怎样的前景?BAT入驻生活服务领域,58同城如何在压力中实现自己的以人为本之路,将H2H的理念贯彻,让生活更简单的企业定位得以实现? 一.              纵观互联网的发展,变革就是以人为中心 纵观我国不可撼动的BAT,百度致胜的是人与信息,腾讯致胜的是人与社交,阿里致胜的则是人与商品.那么作为移动互联网正在迅速崛起,人与人之间联系日渐加深的移动互联网时期,生活服务的便利性逐渐被人们重视起来,嘀嘀和快的之

媳妇熬成婆?分类信息之上 58同城打算干点别的

经过近一年时间的频繁投资之后,近期58同城进行了大规模的组织架构调整,此举意在向业界展示58同城的未来发展方向,同时也显露了姚劲波的野心.另外,让58可喜的是,伴随组织架构调整而来的还有一份超预期的亮眼财报,这在提升资本市场信心的同时也抵挡了不少质疑之声. 10亿美元投资并购目标已完成1/3 此前,包括58同城.赶集网在内的分类信息网站频繁招到业界质疑,一来认为分类信息市场已步入市场瓶颈期,未来成长空间不足:二来以分类信息的营收能力,企业难有更大作为,而且获取流量的成本较高,用户需求频次相对较低