线程

成功面试宝典Java

可紊 提交于 2020-04-03 23:35:29
1、面向对象的特征有哪些方面? 2、访问修饰符public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 4、float f=3.4;是否正确? 5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗? 6、Java有没有goto? 7、int和Integer有什么区别? 8、&;和&&;的区别? 9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。 10、Math.round(11.5)等于多少?Math.round(-11.5)等于多少? 11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 12、用最有效率的方法计算2乘以8? 13、数组有没有length()方法?String有没有length()方法? 14、在Java中,如何跳出当前的多重嵌套循环? 15、构造器(constructor)是否可被重写(override)? 16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 17、是否可以继承String类? 18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果

了解Kafka生产者

不打扰是莪最后的温柔 提交于 2020-04-03 23:01:12
了解Kafka生产者 ​ 之前对kafka的整体架构有浅显的了解,这次正好有时间,准备深入了解一下kafka,首先先从数据的生产者开始吧。 生产者的整体架构 ​ 可以看到整个生产者进程主要由两个线程进行协调工作,其中一个是主线程,首先由KafkaProducer创建消息,然后通过拦截器、消息序列化器、分区器的处理后,缓存到消息累加器中。另一个是Sender线程,负责从消息累加器中获取消息,并发送至Kafka集群中。 ​ 下面来具体分析各个组件的作用,以便加深了解。 拦截器 : 从名字就可看出是按照一定规则对消息进行过滤。这个具体的规则可以自己去重写kafka中的ProducerInterceptorPrefix类中的onSend方法来实现。之后在KafkaProducer的配置参数 interceptor.classes中指定该拦截器来进行使用。还可以指定多个拦截器,组成拦截链。 序列化器 :生产者需要使用它将消息对象转化为字节数组发送给kafka集群。消费者端进行反序列化还原消息对象。kafka中自带序列化器StringSerializer可对String、VyteArray、ByteBuffer等等类型进行序列化。kafka支持自定义序列化器,实现Serializer,重写serialize方法,即可实现自定义序列化器。修改配置文件中的value

JS系列-事件循环机制event Loop

那年仲夏 提交于 2020-04-03 18:45:05
任务   可以分成两种,一种是 同步任务 (synchronous),另一种是 异步任务 (asynchronous)。 同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务; 异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。 运行机制如下: (1)所有同步任务都在主线程上执行,形成一个 执行栈 (execution context stack)。 (2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。 (3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。 (4)主线程不断重复上面的第三步。只要主线程空了,就会去读取"任务队列" 任务队列: "任务队列"是一个事件的队列,IO设备完成一项任务,就在"任务队列"中添加一个事件,表示相关的异步任务可以进入"执行栈"了。主线程读取"任务队列",就是读取里面有哪些事件; 除了IO设备的事件以外,还包括一些用户产生的事件(比如鼠标点击、页面滚动等等)。只要指定过回调函数,这些事件发生时就会进入"任务队列",等待主线程读取。 "回调函数

OC开发_整理笔记——多线程之GCD

泄露秘密 提交于 2020-04-03 10:22:10
一、进程和线程     二、各种队列!   1、GCD:Grand Central Dispatch   2、串行队列(Serial)     你 可以创建 任意个数的串行队列,每个队列依次执行添加的任务, 一个队列同一时刻只能执行一个任务 (串行),但是各个队列之间不影响,可以并发执行。每个队列中的任务运行在一个由各自串行队列    维护的独立线程上, 一个队列中只有一个线程 。   3、并行队列(Concurrent)     并行队列是 不允许自己创建 的,系统中存在三个不同优先级的并行队列。并行队列依旧按照任务添加的顺序启动任务,但是,后一个任务无须等待前一个任务执行完毕,而是启动第一个任务后,立即启动    下一个任务。至于同一时刻允许同时运行多少个任务由 系统决定 。任务各自运行在并行队列为他们提供的独立线程上, 并行队列中同时运行多少个任务,就必须维护多少个线程 。   4、主调度队列(main dispatch queue)     主调度队列中的任务运行在应用程序 主线程 上,所以,如果你要修改应用程序的界面,他是唯一的选择   5、全局队列(苹果为了方便多线程的设计,提供一个全局队列,供 所有的APP共同使用 ) 三、队列的任务处理   1、串行队列(✅ DISPATCH_QUEUE_SERIAL )的同步任务和异步任务:dispatch_sync 和

C#多线程学习

自闭症网瘾萝莉.ら 提交于 2020-04-03 08:16:19
任何程序在执行时,至少有一个主线程。在.net framework class library中,所有与多线程机制应用相关的类都是放在System.Threading命名空间中的。如果你想在你的应用程序中使用多线程,就必须包含这个类。 Thread类有几个至关重要的方法,描述如下: Start():启动线程; Sleep(int):静态方法,暂停当前线程指定的毫秒数; Abort():通常使用该方法来终止一个线程; Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复; Resume():恢复被Suspend()方法挂起的线程的执行。 一个直观印象的线程示例: using System;using System.Threading; namespace ThreadTest{  class RunIt  {    [STAThread]    static void Main(string[] args)    {      Thread.CurrentThread.Name="System Thread";//给当前线程起名为"System Thread" Console.WriteLine(Thread.CurrentThread.Name+"'Status:"+Thread.CurrentThread.ThreadState);     

IOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

社会主义新天地 提交于 2020-04-03 05:29:44
Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。 设计: GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。 一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。 GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行 dispatch queue分为下面三种: Serial 又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。 Concurrent 又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。 Main dispatch queue 它是全局可用的serial queue,它是在应用程序主线程上执行任务的。 我们看看dispatch

iOS多线程系统整理 swift

倖福魔咒の 提交于 2020-04-03 05:26:25
多线程 是一个应用程序内多个代码的执行路径,执行线程,同时在同一时间里执行不同的任务。 三种: 1、NSTread 2、Cocoa NSOperation (NSOperation,NSOperationQueue) 3、GrandCentralDispatch:GCD 1\NSTread 相对最简单,需要自己管理线程的生命周期和线程同步(加锁会有一定的系统开销) 两种应用方式: 需要传递三个参数: selector:线程执行方法"" target:方法所在的对象 argument:传递给方法的参数,可选nil 一、直接创建线程,自动运行线程 // Class Method class func detachNewThreadSelector(selector:Selector,toTarget target:AnyObject,withObject argument:AnyObject?) 二、先创建一个线程对象,手动运行线程,在运行之前可设置线程优先级等信息。 convenience init(target:AnyObject,selector:Selector,object argument:AnyObject?) for example // download image method func downloadImage() { var imageUrl = "https

iOS多线程——GCD篇

左心房为你撑大大i 提交于 2020-04-03 05:25:54
什么是GCD GCD是苹果对多线程编程做的一套新的抽象基于C语言层的API,结合Block简化了多线程的操作,使得我们对线程操作能够更加的安全高效。 在GCD出现之前Cocoa框架提供了NSObject类的 performSelectorInBackground:withObject performSelectorOnMainThread 方法来简化多线程编程技术。 GCD可以解决以下多线程编程中经常出现的问题: 1.数据竞争(比如同时更新一个内存地址) 2.死锁(互相等待) 3.太多线程导致消耗大量内存 在iOS中,如果把需要消耗大量时间的操作放在主线程上面,会妨碍主线程中被称为RunLoop的主循环的执行,从而导致不能更新用户界面、应用程序的画面长时间停滞等问题。 Dispatch Queue Dispatch Queue是GCD中对于任务的抽象队列(FIFO)执行处理。 queue分为两种, SERIAL_DISPATCH_QUEUE           等待现在执行中处理结束 CONCURRENT_DISPATCH_QUEUE       不等待现在执行中处理结束 换句话说也就是 SERIAL_DISPATCH_QUEUE 是串行,CONCURRENT_DISPATCH_QUEUE是并行。 具体到线程上,就是SERIAL_DISPATCH

Java常见面试题——仅供实习

回眸只為那壹抹淺笑 提交于 2020-04-03 05:25:12
注:从网络整理而来。红字为不理解,待查阅内容 1.面向对象的特征有哪些方面? 抽象,就是将具有一致属性和行为的对象抽象成一个类,只强调本质的属性和行为,先不考虑具体的细节。 继承,子类自动共享父类的属性和行为。单重继承是指子类只继承一个父类的属性和行为,多重继承是子类可以继承多个类的属性和行为。 多态,相同的函数作用在不同的对象上会获得不同的结果。 封装,只给用户看用户需要看的东西。 2.int 和 Integer 有什么区别 Java 提供两种不同的类型:原始类型(或内置类型)和引用类型。Java为每个原始类型提供了封装类。 Int是java的原始数据类型,Integer是java为int提供的封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double 引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题等。另外,对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 3.String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串。 String类提供了数值不可改变的字符串