面试

Java多线程中start()和run()的区别

五迷三道 提交于 2021-01-13 16:08:26
Java的线程是通过java.lang.Thread类来实现的。VM启动时会有一个由主方法所定义的线程。可以通过创建Thread的实例来创建新的线程。每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。 在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡: 第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。 第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。 第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。 第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个事件的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。 第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。 实现并启动线程有两种方法: 1、写一个类继承自Thread类

Java多线程系列--“JUC集合”之 ArrayBlockingQueue

故事扮演 提交于 2021-01-13 15:36:55
ArrayBlockingQueue介绍 ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。 线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。而有界,则是指ArrayBlockingQueue对应的数组是有界限的。 阻塞队列,是指多线程访问竞争资源时,当竞争资源已被某线程获取时,其它要获取该资源的线程需要阻塞等待;而且,ArrayBlockingQueue是按 FIFO(先进先出)原则对元素进行排序,元素都是从尾部插入到队列,从头部开始返回。 注意: ArrayBlockingQueue 不同于 ConcurrentLinkedQueue , ArrayBlockingQueue 是数组实现的,并且是有界限的;而 ConcurrentLinkedQueue 是链表实现的,是无界限的。 ArrayBlockingQueue· 原理和数据结构 ArrayBlockingQueue 的数据结构,如下图所示: 说明: 1. ArrayBlockingQueue继承于AbstractQueue,并且它实现了BlockingQueue接口。 . ArrayBlockingQueue内部是通过Object[]数组保存数据的,也就是说ArrayBlockingQueue本质上是通过数组实现的

AI:互联网程序设计竞赛之蓝桥杯大赛的简介、奖项设置、大赛内容以及蓝桥杯与ACM(ICPC)的四个维度对比之详细攻略

左心房为你撑大大i 提交于 2021-01-13 11:48:08
AI:互联网程序设计竞赛之蓝桥杯大赛的简介、奖项设置、大赛内容以及蓝桥杯与ACM(ICPC)的四个维度对比之详细攻略 导读 : 蓝桥杯属于互联网程序设计竞赛的一种,除了它之外,类似的比赛还有ICPC(ACM国际大学生程序设计竞赛)、CCPC(中国大学生程序设计竞赛)等等。其实,从考题难度来说,蓝桥杯比ACM低一点,但是,最近几年,随着影响力的变大,难度也一直在提高。在国内,名气是比较响的,毕竟 蓝桥杯有着工信部的背景 。 近些年,蓝桥杯的主题越来越跟进时代,所以,越来越多的内容涉及人工智能和大数据专业知识。蓝桥杯在国内学校中,大部分都是公费支持学生参加的,更重要的是,个人一旦获奖, 对保研和奖学金评选非常有用 。因为蓝桥杯主要是以就业为导向的,所以,该竞赛的软件知识点涉及到Java、C/C++、Python等编程语言(适合擅长数据结构和算法专业的学生);硬件知识点涉及到单片机、物联网设计、EDA设计等(适合擅长硬件专业的学生)。从往年经验来看,至少要掌握好基本的数据结构和算法,因为省赛国赛题目难度梯度都很大,小题简单但分值低,大题难分值极高,所以,蓝桥杯竞赛同时兼顾了广大普通学生和有算法功底的学生。 有网友经常私信博主: 蓝桥杯和ICPC到底应该选择哪个? 此处,请允许博主来个凡尔赛文:小孩子才做选择,而我,全都要。原因很简单,博主认为蓝桥杯和ICPC本质上都属于算法竞赛

PHP7源码之array_unique函数分析

血红的双手。 提交于 2021-01-13 11:00:26
以下源码基于 PHP 7.3.8 array array_unique ( array array[,intarray[,intsort_flags = SORT_STRING ] ) (PHP 4 >= 4.0.1, PHP 5, PHP 7) array_unique — 移除数组中重复的值 参数说明: array:输入的数组。 sort_flag:(可选)排序类型标记,用于修改排序行为,主要有以下值: SORT_REGULAR - 按照通常方法比较(不修改类型) SORT_NUMERIC - 按照数字形式比较 SORT_STRING - 按照字符串形式比较 SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 array_unique 函数的源代码在 /ext/standard/array.c 文件中。由于 PHP_FUNCTION(array_unique){ // code... } 篇幅过长,完整代码不在这里贴出来了,可以参见 GitHub 贴出的源代码。 定义变量 zval *array; uint32_t idx; Bucket *p; struct bucketindex *arTmp, *cmpdata, *lastkept; unsigned int i; zend_long sort_type = PHP_SORT_STRING;

C# 基础知识系列- 4 面向对象

坚强是说给别人听的谎言 提交于 2021-01-13 08:51:33
面向对象 面向对象是一个抽象的概念,其本质就是对事物以抽象的方式建立对应的模型。 简单来讲,比如我有一只钢笔,那么我就可以通过分析,可以得到 这只钢笔的材第是塑料,品牌是个杂牌 ,里面装的墨是黑色的,可以用。这时候就能建立一个钢笔的模型,它在这里应该有这些属性: 图是一个不正确的UML类图,但是可以简单的概述一下我们抽象的结果。这个图就描述了一个我们抽象出来的钢笔类应该有哪些特性,而我手里的那只钢笔就可以看做是钢笔类的一个实例。 简单来讲,面向对象编程就是针对一个事件或者说一个过程,找到这个过程中参与的所有人、事务或者相对独立的个体,按照他们在这个过程中表现,提取出他们的特性,描述他们的行为,然后按照类别不同再抽象出类来。 所以,类是事物的概念抽象,事物是类的特殊实例。 创建一个类 上面简单的介绍了面向对象的概念,现在先创建一个C#类,然后介绍一下这个类需要注意的地方: public class Person { private static int count; public static int Count { get { return count; } set { count = value; } } private string name; public string Name { get { return name; } set { name = value; } }

Spring事务管理详解_基本原理_事务管理方式

廉价感情. 提交于 2021-01-13 08:50:54
1. 事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交,那在没有Spring帮我们管理事务之前,我们要怎么做。 Connection conn = DriverManager.getConnection(); try { conn.setAutoCommit( false ); // 将自动提交设置为false 执行CRUD操作 conn.commit(); // 当两个操作成功后手动提交 } catch (Exception e) { conn.rollback(); // 一旦其中一个操作出错都将回滚,所有操作都不成功 e.printStackTrace(); } finally { conn.colse(); } 事务是一系列的动作,一旦其中有一个动作出现错误,必须全部回滚,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始的状态,避免出现由于数据不一致而导致的接下来一系列的错误。事务的出现是为了确保数据的完整性和一致性,在目前企业级应用开发中,事务管理是必不可少的。 2. 常见spring事务面试题 2.1 什么是事务? 单个逻辑单元执行一系列的事,要么全成功,要么全不执行。 spring事务的本质就是对数据库事务的支持,没有数据库的事务支持

Java集合系列(一):集合的定义及分类

一曲冷凌霜 提交于 2021-01-13 07:38:39
1. 集合的定义 什么是集合呢? 定义:集合是一个存放对象的引用的容器。 在Java中,集合位于java.util包下。 2. 集合和数组的区别(面试常问) 提到容器,就会想起数组,那么 集合和数组的区别是什么呢? (这里是重点,面试可能问的比较多) 数组和集合都是Java中的容器 数组的长度是固定的,集合的长度是可变的 数组只能存储相同数据类型的数据,这里的数据类型可以是基本数据类型,也可以是引用类型 集合可以存储不同数据类型的对象的引用(但一般情况下,我们会使用泛型来约定只使用1种数据类型),但不能存储基本数据类型 空口无凭,我们来点代码配合理解,首先,我们看下如下的数组代码: String[] platformArray = new String[3]; platformArray[0] = "博客园"; platformArray[1] = "掘金"; platformArray[2] = "微信公众号"; platformArray[3] = "个人博客"; 运行代码就会发现, platformArray[3] = "个人博客"; 会引发 java.lang.ArrayIndexOutOfBoundsException 异常。 而使用集合时就不存在这个问题,因为集合在声明时不需要指定长度并且长度会根据放入元素的多少而变化: List<String>

GET和POST两种基本请求方法的区别

依然范特西╮ 提交于 2021-01-13 07:27:15
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 表单提交中get和post方式的区别有5点 1.get是从服务器上获取数据,post是向服务器传送数据。 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。 3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。 4.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。(这里有看到其他文章介绍get和post的传送数据大小跟各个浏览器、操作系统以及服务器的限制有关) 5.get安全性非常低,post安全性较高。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信和喜悦。

37岁的老码农在找工作

最后都变了- 提交于 2021-01-13 05:49:30
作者 自由飞 来源 http://17bang.ren/Article 前几天突然接到dk的电话,要和我聊聊天。 他说他们部门调整,虽然最后他留了下来,但还是非常焦虑。人无远虑必有近忧,他这次被刺激到了,想提高一下自己,以免下次再有类似的心惊肉跳。但怎么提高呢? 程序员第一考虑的当然是技术,但现在真不知道学什么了:干了三四年的开发,手头的工作马马虎虎都没什么问题了。就算有问题,也是业务逻辑上的问题,系统太复杂,吃不透;或者系统里一些过时的/生僻的技术,真心觉得没必要花时间花精力去研究,能对付就行了,是不是?反正下家单位99.99%的几率是不会用到这些东西的的。 那么就是一些新技术了。新技术杂得很,不知道学什么,框架类库啥的其实没什么技术含量,一两个星期就可以上手,上手了之后呢?往深里学?其实和老旧技术一样的问题,谁知道下一份工作用不用得上呢!而且没趣,大概是因为没有挑战性吧,反正就那个样,还能咋的? 一直聊到这里,我都非常理解。我这个十年的老码农,体会比他还深。其实稍微干上一些年头,就是这个样子,看起来像是“学习热情下降”“懒得学习”,但本质上呢,两个原因: 1、本身的技能增强,能够应付日常工作,没有刚入行时那么大的压力了。 2、学习的边际效益递减,所以开始考虑投资/收益比了。刚入行的时候,技术一丁点的进步,都能带来非常大的成就感,至少能少挨点骂,是不是?积累到一定时候

微信小程序学习记录

杀马特。学长 韩版系。学妹 提交于 2021-01-13 04:34:28
今天有个某平台有位面试官问我做没做过小程序,作为一个从黑马培训完Python出来后,第一份正式工作却不是后端的我,当然是没做过了。。面试官想让我尝试去学习一下,而我个人也想着去多学点东西,当然,如果单纯写接口的话,那就太简单了。。给一个大佬朋友做了下简单的交流,他正好有udacity 的课程,先去学学看一个小程序基础(天气应用),学习前,会有一些简单的练习,测试一下前端基础,HTML,CSS都过啦,JavaScript 这边有点小问题,这里记录一下,问题: 下面是个 donut 甜甜圈对象数组 var donuts = [ { type: "Jelly", cost: 1.22 }, { type: "Chocolate", cost: 2.45 }, { type: "Cider", cost: 1.59 }, { type: "Boston Cream", cost: 5.99 } ] ; 说明: 使用 forEach() 方法循环访问该数组,并使用 console.log 输出以下甜甜圈摘要 Jelly donuts cost $1.22 each Chocolate donuts cost $2.45 each Cider donuts cost $1.59 each Boston Cream donuts cost $5.99 each 然后让补充完下面的代码 /* *