多线程(三)

2023-10-27

Java 208 道面试题 · 多线程

 

35. 并行和并发有什么区别?

  • 并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。

  • 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。

  • 在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。

所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。

36. 线程和进程的区别?

简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。

37. 守护线程是什么?

守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程。

38. 创建线程有哪几种方式?

①. 继承Thread类创建线程类

  • 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。

  • 创建Thread子类的实例,即创建了线程对象。

  • 调用线程对象的start()方法来启动该线程。

②. 通过Runnable接口创建线程类

  • 定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。

  • 创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

  • 调用线程对象的start()方法来启动该线程。

③. 通过Callable和Future创建线程

  • 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。

  • 创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

  • 使用FutureTask对象作为Thread对象的target创建并启动新线程。

  • 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。

39. 说一下 runnable 和 callable 有什么区别?

有点深的问题了,也看出一个Java程序员学习知识的广度。

  • Runnable接口中的run()方法的返回值是void,它做的事情只是纯粹地去执行run()方法中的代码而已;

  • Callable接口中的call()方法是有返回值的,是一个泛型,和Future、FutureTask配合可以用来获取异步执行的结果。

40. 线程有哪些状态?

线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。

  • 创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。

  • 就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。

  • 运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。

  • 阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。

  • 死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪   

41. sleep() 和 wait() 有什么区别?

sleep():方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。

wait():wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程

42. notify()和 notifyAll()有什么区别?

  • 如果线程调用了对象的 wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。

  • 当有线程调用了对象的 notifyAll()方法(唤醒所有 wait 线程)或 notify()方法(只随机唤醒一个 wait 线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。也就是说,调用了notify后只要一个线程会由等待池进入锁池,而notifyAll会将该对象等待池内的所有线程移动到锁池中,等待锁竞争。

  • 优先级高的线程竞争到对象锁的概率大,假若某线程没有竞争到该对象锁,它还会留在锁池中,唯有线程再次调用 wait()方法,它才会重新回到等待池中。而竞争到对象锁的线程则继续往下执行,直到执行完了 synchronized 代码块,它会释放掉该对象锁,这时锁池中的线程会继续竞争该对象锁。

43. 线程的 run()和 start()有什么区别?

每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。

start()方法来启动一个线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码; 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行状态, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。

run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。 如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接待用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。

44. 创建线程池有哪几种方式?

①. newFixedThreadPool(int nThreads)

创建一个固定长度的线程池,每当提交一个任务就创建一个线程,直到达到线程池的最大数量,这时线程规模将不再变化,当线程发生未预期的错误而结束时,线程池会补充一个新的线程。

②. newCachedThreadPool()

创建一个可缓存的线程池,如果线程池的规模超过了处理需求,将自动回收空闲线程,而当需求增加时,则可以自动添加新线程,线程池的规模不存在任何限制。

③. newSingleThreadExecutor()

这是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建一个新的来替代它;它的特点是能确保依照任务在队列中的顺序来串行执行。

④. newScheduledThreadPool(int corePoolSize)

创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务,类似于Timer。

45. 线程池都有哪些状态?

线程池有5种状态:Running、ShutDown、Stop、Tidying、Terminated。

线程池各个状态切换框架图:

详细解释见:Java多线程线程池(4)--线程池的五种状态

46. 线程池中 submit()和 execute()方法有什么区别?

  • 接收的参数不一样

  • submit有返回值,而execute没有

  • submit方便Exception处理

47. 在 java 程序中怎么保证多线程的运行安全?

线程安全在三个方面体现:

  • 原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(atomic,synchronized);

  • 可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,volatile);

  • 有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原则)。

48. 多线程锁的升级原理是什么?

在Java中,锁共有4种状态,级别从低到高依次为:无状态锁,偏向锁,轻量级锁和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级。

锁升级的图示过程: 

锁共有4种状态详解: 【Java多线程策略 一】锁的三种状态切换

49. 什么是死锁?

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。是操作系统层面的一个错误,是进程死锁的简称,最早在 1965 年由 Dijkstra 在研究银行家算法时提出的,它是计算机操作系统乃至整个并发程序设计领域最难处理的问题之一。

50. 怎么防止死锁?

死锁的四个必要条件:

  • 互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源

  • 请求和保持条件:进程获得一定的资源之后,又对其他资源发出请求,但是该资源可能被其他进程占有,此事请求阻塞,但又对自己获得的资源保持不放

  • 不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完后自己释放

  • 环路等待条件:是指进程发生死锁后,若干进程之间形成一种头尾相接的循环等待资源关系

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之 一不满足,就不会发生死锁。

理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和 解除死锁。

所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确 定资源的合理分配算法,避免进程永久占据系统资源。

此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。


51. ThreadLocal 是什么?有哪些使用场景?

线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放,Java 应用就存在内存泄露的风险。

52.说一下 synchronized 底层实现原理?

synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性。

Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:

  • 普通同步方法,锁是当前实例对象

  • 静态同步方法,锁是当前类的class对象

  • 同步方法块,锁是括号里面的对象

53. synchronized 和 volatile 的区别是什么?

  • volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

  • volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。

  • volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。

  • volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。

  • volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化。

54. synchronized 和 Lock 有什么区别?

  • 首先synchronized是java内置关键字,在jvm层面,Lock是个java类;

  • synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;

  • synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;

  • 用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;

  • synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可);

  • Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

55. synchronized 和 ReentrantLock 区别是什么?

synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别。既然ReentrantLock是类,那么它就提供了比synchronized更多更灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量,ReentrantLock比synchronized的扩展性体现在几点上: 

  • ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁 

  • ReentrantLock可以获取各种锁的信息

  • ReentrantLock可以灵活地实现多路通知 

另外,二者的锁机制其实也是不一样的:ReentrantLock底层调用的是Unsafe的park方法加锁,synchronized操作的应该是对象头中mark word。
56. 说一下 atomic 的原理?

Atomic包中的类基本的特性就是在多线程环境下,当有多个线程同时对单个(包括基本类型及引用类型)变量进行操作时,具有排他性,即当多个线程同时对该变量的值进行更新时,仅有一个线程能成功,而未成功的线程可以向自旋锁一样,继续尝试,一直等到执行成功。

Atomic系列的类中的核心方法都会调用unsafe类中的几个本地方法。我们需要先知道一个东西就是Unsafe类,全名为:sun.misc.Unsafe,这个类包含了大量的对C代码的操作,包括很多直接内存分配以及原子操作的调用,而它之所以标记为非安全的,是告诉你这个里面大量的方法调用都会存在安全隐患,需要小心使用,否则会导致严重的后果,例如在通过unsafe分配内存的时候,如果自己指定某些区域可能会导致一些类似C++一样的指针越界到其他进程的问题。

原文地址:https://blog.csdn.net/sufu1065/article/details/88051083

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程(三) 的相关文章

  • (初级)PHP经典面试题目汇总-沃森建站教程博客

    原文地址 http wosn net 355 html
  • 前端面试题 vue专项,共计58道

    vue篇 1 什么是MVVM 2 Vue声明周期 3 为什么vue中data必须是一个函数 4 vue router有几种导航钩子 5 Vue的v show和v if区别 6 vue loader是什么 使用它的用途有哪些 7 计算属性和w
  • Java集合面试题 52道

    集合容器概述 什么是集合 集合就是一个放数据的容器 准确的说是放数据对象引用的容器 集合类存放的都是对象的引用 而不是对象的本身 集合类型主要有3种 set 集 list 列表 和map 映射 集合的特点 集合的特点主要有如下两点 集合用于
  • Computed 和 Watch 的区别

    1 computed计算属性 作用 1 解决模板中放入过多的逻辑会让模板过重且难以维护的问题 例如两个数据的拼接或字体颜色的判断 2 它支持缓存 只有依赖的数据发生了变化 才会重新计算 例如模板中多次用到数据拼接可以用计算属性 只执行一次计
  • Linux面试题

    1 解释下什么是GPL GNU 自由软件 GPL 通用公共许可证 一种授权 任何人有权取得 修改 重新发布自由软件的权力 GNU 革奴计划 目标是创建一套完全自由 开放的的操作系统 自由软件 是一种可以不受限制地自由使用 复制 研究 修改和
  • uniapp部分面试题汇总

    1 谈谈你对uni app的理解 uni app是一个使用Vue js开发所有前端应用的框架 开发者编写一套代码 可以发布到IOS Android Web 响应式 以及各种小程序 快应用等多个平台 uniapp真正做到一套代码多端发行 支持
  • Go语言面试题--基础语法(15)

    文章目录 1 下面代码中 x 已声明 y 没有声明 判断每条语句的对错 2 下面代码输出什么 3 下面代码输出什么 1 下面代码中 x 已声明 y 没有声明 判断每条语句的对错 x f x f x y f x y f 参考答案及解析 错 对
  • GET和POST的区别、Promise的两个方法及POST请求常见的参数类型

    GET和POST的区别 可能有纰漏 区别 GET POST 参数的位置不同 GET把请求参数直接暴露在URL上 因此GET比POST更不安全 不能用来传递敏感信息 GET请求发送的参数会被完整的保留在浏览器历史记录里 POST把请求参数放在
  • 面试题(1)封装c++

    前言 在学习的过程中我开始积累面试题 让我们一起开始学习 进步吧 卷起来 封装的定义 定义 将数据和操作数据的方法进行有机结合 隐藏对象的属性和实现细节 仅对外公开接口来和对象进行交互 封装本质上是一种管理 就好比如办画展的时候我们要把画用
  • map 如何使用结构体作为自定义键值

    在使用map时 有时候我们需要自定义键值 才能符合程序的需要 比如我们需要使用自定义的结构体来作为map的键值 struct Test int x int y 这样直接使用的话 在编译时会出问题 1 gt Build started Pro
  • Amazon SDE实习机会面试经验分享

    我通过大学申请了Amazon SDE实习 在线回合 有一个在线回合 其中包含技术性MCQ和2个编码问题 编码部分非常简单 面试过程中有7 8人入围 第一轮面对面访谈 这一回合持续了一个小时 首先 面试官要求自我介绍 后来有3个编码问题 对包
  • Java基础面试题(三) (2020持续更新)

    前言 全套面试题请直接转到文章末尾 1 Java 中能创建 volatile 数组吗 能 Java 中可以创建 volatile 类型数组 不过只是一个指向数组的引用 而不 是整个数组 我的意思是 如果改变引用指向的数组 将会受到 vola
  • 经典田忌赛马算法JAVA解决代码

    题记 现在很多经典的故事都被变成程序员的考试题 前几天女朋友面试题就碰到了 后来跟我说了 自己也做了下 那么下面就先来温习下这个故事 田忌赛马出自 史记 卷六十五 孙子吴起列传 第五 故事的主角是田忌 孙膑和齐威王 是中国历史上有名的揭示如
  • 2021.11.30 面试题

    1 请你介绍一下map的分类和常见的情况 java为数据结构中的映射定义了一个接口java util Map 它有四个实现类 分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对
  • 面试:Spring&SpringMVC&Mybatis 面试必备面试题

    Spring SpringMVC Mybatis常见面试题 历史文章 多线程史上最全面试题 持续更新中 dubbo zookeeper55道高频面试题 附加答案 SpringCloud SpringBoot经典面试题 附加答案 Spring
  • 这份4577页的Java面试PDF,让我成功斩获阿里、字节等大厂offer

    我为大家准备了一份超级全面的Java 学习面试笔记 这份电子版笔记涵盖了诸多后端技术栈的面试题和答案 相信可以帮助大家在最短的时间内复习Java后端的大多数技术点和面试题 从而拿到自己心仪的offer 共4577页 整体还是比较清爽的 大家
  • 【面试题】宏任务和微任务

    1 宏任务和微任务 宏任务 macroTask 和微任务 microTask 都是异步中API的分类 宏任务 setTimeout setInterval Ajax DOM事件 微任务 Promise async await 微任务执行时机
  • 操作系统常见面试题及答案

    操作系统 从系统观点看 是计算机系统的一个系统软件 管理和控制计算机系统中的资源 从用户观点看 操作系统是用户与计算机之间的接口 从软件观点看 操作系统是程序和数据结构的集合 1 什么是进程 process 和线程 thread 有何区别
  • RabbitMQ消息队列基础点

    消息队列 为什么使用消息队列 1 解耦 2 异步 3 削峰 消息队列的缺点 各种消息中间件的区别 消息丢失 如何保证消息的顺序性 如何解决消息队列的延时以及过期失效问题 消息队列满了以后该怎么处理 有几百万消息持续积压几小时 说说怎么解决
  • 【java面试常见2】

    文章目录 1 返回json串要加什么注解 2 RestController包含了什么注解 3 docker拉取镜像 4 springMVC的相关注解 5 vue框架和HTML有什么区别 为什么要使用vue 6 从Mysql中随机获取数据用什

随机推荐

  • 修改外向交货单:BAPI_OUTB_DELIVERY_CHANGE/SD_DELIVERY_UPDATE_PICKING_SAP刘梦_新浪博客

    TABLES LIKP PARAMETERS P DEL LIKE LIKP VBELN DEFAULT 8000002260 DATA STR HEADER DATA LIKE BAPIOBDLVHDRCHG STR HEADER CON
  • POJ-1240(分治,递归降解)

    题目 http poj org problem id 1240 题目的意思即 给定一棵m元树的前序和后序遍历 问你一共有多少颗m元树有这样的性质 乍一看好像没什么头绪 由于题目中也提到了由中序和后序求前序 想到是不是同样能用分治法 我们知道
  • 在阿里云服务器上部署Jekyll博客

    Step 0 首先买一台服务器 并且装好环境 我都是在阿里云上面买 而且我只是想挂一个个人网站 所以只需要最便宜的轻量应用服务器就好 半年只需要72块钱 我现在想来 之前也应该买香港的服务器 因为更加便宜 大陆的要60块一月 而且不需要给服
  • 初识ASO

    大概了解了一下ASO 在此记录一下 ASO 应用商店优化 的简称 ASO App Search Optimization 重点在于关键词搜索排名优化 覆盖热词 搜索下载激活 优化评论 关键词覆盖数量优化 就是指用户搜索更多关键词都能找到该款
  • VS Code(Visual Studio Code)环境下C++开发的配置方法

    一 Visual Studio Code的下载 去官网下载 下载地址 https code visualstudio com Download 我在windows系统下使用 直接点击Windows那个图标下载就好 安装时可以自己选择一下安装
  • layui源码详细分析之树形菜单

    前言 今天分析的是layui框架内置模块tree js 该模块的功能是构建树形菜单 具体的形式 layui官网该模块的具体形式 如下 自实现树形菜单 使用html css js实现了树形菜单 具体的实现思路如下 html中定义包含树形菜单的
  • C++选择结构学案

    学习目标 熟练掌握 C 中的关系 逻辑运算符 熟知关系 逻辑运算符和数学运算符的优先级 学会正确使用选择表达式 知识着陆 1 关系运算符 使用关系运算符需要注意的问题 1 等于 与 赋值 的区别 2 实型数据 浮点数 的关系运算 3 运算符
  • 锚点的作用及用法

    锚点的作用及用法 HTML中的a标签大家都非常熟悉 它是超链接标签 通过a标签能够跳转到href中指定的页面及指定的位置 a标签可以做到单页面跳转或多页面跳转 锚点能够跳转到当前页面中指定的位置 也能够跳转到指定的其他页面或其他页面中指定的
  • anaconda怎么运行python程序_PyCharm运行Python程序

    介绍如何使用 PyCharm 创建 Python 项目 以及如何编写并运行 Python 程序 PyCharm创建Python项目 PyCharm 中 往往是通过项目来管理 Python 源代码文件的 虽然对于第一个 Python 程序来说
  • java中的String类型的对象为什么可以自动转换成Object类型的?而Object却要强制转换成String类型的

    java中的String类型的对象为什么可以自动转换成Object类型的 而Object却要强制转换成String类型的 5 比如 String a hello Object b a 这样可以直接用 而 Object a hello Str
  • vue鼠标点击指定区域创建dom元素与编辑删除元素的思路

    vue鼠标点击指定区域创建dom元素与编辑删除元素的思路 话不多说有思路直接干 一 鼠标点击页面灰色背景创建红色元素 二 点击已经创建的红色元素则是编辑或者删除 根据点击元素的类名来判断是属于创建元素还是编辑或者删除元素 e target
  • 多个checkpoint 的参数进行平均

    source model 路径下 存在 以下几个checkpoint model checkpoint path model ckpt 457157707 all model checkpoint paths model ckpt 4560
  • 动手学深度学习d2l.Animator无法在PyCharm中显示动态图片的解决方案

    from d2l import torch as d2l 一 问题描述 运行d2l的训练函数 仅在控制台输出以下内容 无法显示动态图片 训练监控
  • notepad++ 正则表达式

    转载自 https www cnblogs com winstonet p 10635043 html 注意 Notepad 正则表达式字符串最长不能超过69个字符 转义字符 如 要使用 本身 则应该使用 t Tab制表符 注 扩展和正则表
  • 5. C++知识点之else分支

    上篇文章我们说了if语句 这篇文章我们再来说说if语句的后半部分 else if但分支选择结构在条件为真时采取操作 条件为假时则忽略这个操作 利用if else双分支选择结构则可以在条件为真时和条件和假时采取不同操作 格式 格式1 if 条
  • 论文阅读之Arcface

    Arcface论文阅读 文章目录 Arcface论文阅读 人脸识别流程 数据 VGG2 MS Celeb 1M MegaFace LFW CPF AgeDB 损失层 Softmax Loss Center Loss A Softmax Lo
  • 调试三角形

    图形sdk 一般是从三角形开始的 先运行下 还好 能过 要不白费劲了 是一个旋转的三角形 看看代码 先折叠下 猜测大概有啥东西 如果我写 该怎么写 顶点数组 索引数组 应用 创建 清理 动画 运行 配置 顶点数组和索引是传到三角形的 创建和
  • 版本更新

    MyEclipse是开源工具Eclispse的进一步扩展 是目前最实惠 功能最全面的J2EE IDE与Web开发工具套件 MyEclipse可用于用户所有的UML AJAX Web Web Services J2EE JSP XML Str
  • jvm调优一、linux内存查看命令

    1 整体情况查看 任务管理器 top 第三行就是CPU的使用情况了 如下 Cpu s us用户空间占用CPU百分比sy内核空间占用CPU百分比ni用户进程空间内改变过优先级的进程占用CPU百分比id空闲CPU百分比wa等待输入输出的CPU时
  • 多线程(三)

    Java 208 道面试题 多线程 35 并行和并发有什么区别 并行是指两个或者多个事件在同一时刻发生 而并发是指两个或多个事件在同一时间间隔发生 并行是在不同实体上的多个事件 并发是在同一实体上的多个事件 在一台处理器上 同时 处理多个任