面试题-Kotlin该如何实现多线程同步
[TOC]
文章转自:https://blog.csdn.net/vitaviva/article/details/108554692
概述多线程开发中,经常会遇到这样的需求:Task1、Task2 等多个任务并行执行,等待全部执行完成后,执行Task3。我们在Kotlin种可以有多种方法实现,在这里一并列举一下:
Thread.join
Synchronized
ReentrantLock
BlockingQueue
CountDownLatch
CyclicBarrier
CAS
Future
CompletableFuture
Rxjava
Coroutine
Task3基于 Task1、Task2返回的结果,拼接字符串,每个任务都通过sleep模拟耗时操作
1234567891011121314val task1: () -> String = { sleep(2000) "Hello".also { println("task1 finished: $it") }}val ...
Java随机数之ThreadLocalRandom学习
[TOC]
字符串在 Java 中是不可变的,因为 String 对象缓存在 String 常量池中。由于缓存的字符串在多个客户之间共享,因此始终存在风险,其中一个客户的操作会影响所有其他客户。例如,如果一段代码将 String “Test” 的值更改为 “TEST”,则所有其他客户也将看到该值。由于 String 对象的缓存性能是很重要的一方面,因此通过使 String 类不可变来避免这种风险。
同时,String类是 final 的,因此没有人可以通过扩展和覆盖行为来破坏 String 类的不变性、缓存、散列值的计算等。String 类不可变的另一个原因可能是由于 HashMap。
由于把字符串作为 HashMap 键很受欢迎。对于键值来说,重要的是它们是不可变的,以便用它们检索存储在 HashMap 中的值对象。由于 HashMap 的工作原理是散列,因此需要具有相同的值才能正常运行。如果在插入后修改了 String 的内容,可变的 String将在插入和检索时生成两个不同的哈希码,可能会丢失 Map 中的值对象。
如果你是印度板球迷,你可能能够与我的下一句话联系起来。字符串是J ...
Java随机数之ThreadLocalRandom学习
[TOC]
概述equals()方法和==的区别
首先大家知道,String既可以作为一个对象来使用,又可以作为一个基本类型来使用。这里指的作为一个基本类型来使用只是指使用方法上的,比如String s = “Hello”,它的使用方法如同基本类型int一样,比如int i = 1;,而作为一个对象来使用,则是指通过new关键字来创建一个新对象,比如String s = new String(“Hello”)。但是它的内部动作其实还是创建了一个对象,这点稍后会说到。
其次,对String对象的比较方法需要了解。Java里对象之间的比较有两种概念,这里拿String对象来说:
一种是用”==”来比较,这种比较是针对两个String类型的变量的引用,也就是说如果两个String类型的变量,它们所引用同一个String对象(即指向同一块内存堆),则”==”比较的结果是true。
另一种是用Object对象的equals()方法来比较,String对象继承自Object,并且对equals()方法进行了重写。两个String ...
Java随机数之ThreadLocalRandom学习
[TOC]
文章参考:https://zhuanlan.zhihu.com/p/296317549
文章总结问:字符串有长度限制吗?是多少?
答:首先字符串的内容是由一个字符数组 char[] 来存储的,由于数组的长度及索引是整数,且String类中返回字符串长度的方法length() 的返回值也是int ,所以通过查看java源码中的类Integer我们可以看到Integer的最大范围是2^31 -1,由于数组是从0开始的,所以数组的最大长度可以使【0~2^31】通过计算是大概4GB。
但是通过翻阅java虚拟机手册对class文件格式的定义以及常量池中对String类型的结构体定义我们可以知道对于索引定义了u2,就是无符号占2个字节,2个字节可以表示的最大范围是2^16 -1 = 65535。
其实是65535,但是由于JVM需要1个字节表示结束指令,所以这个范围就为65534了。超出这个范围在编译时期是会报错的,但是运行时拼接或者赋值的话范围是在整形的最大范围。
Java随机数之ThreadLocalRandom学习
[TOC]
概述我们经常遇到的一个面试题:请简要说一下String、StringBuffer、StringBuilder区别?
我们都知道StringBuffer、StringBuilder,但是这两个的用法都差不多,真是傻傻分不清楚。到底有什么区别呢?所以我们结合String类来分析一下这三者的区别。下面,我们先看一个表格
类型
值是否可变
线程安全
String
不可变
安全(线程同步)
StringBuilder
可变
不安全(线程不同步)
StringBuffer
可变
安全(线程同步)
首先,我们来分析一下String类.
1234public final class String implements java.io.Serializable, Comparable<String>, CharSequence { ...... }
通过查看源码得知:String类是一个final类。所以可以很清楚的知道,final类是改变不了的,所以,如果我们用String来操作字符串的时候,一旦我们字符串的 ...
Java随机数之ThreadLocalRandom学习
[TOC]
Java判断字符串中是否包含中英文标点符号 /** * 该函数判断一个字符串是否包含标点符号(中文英文标点符号)。
方法一 Java判断字符串中是否包含中英文标点符号
12345678910111213141516171819/** * 该函数判断一个字符串是否包含标点符号(中文英文标点符号)。 * 原理是原字符串做一次清洗,清洗掉所有标点符号。 * 此时,如果原字符串包含标点符号,那么清洗后的长度和原字符串长度不同。返回true。 * 如果原字符串未包含标点符号,则清洗后长度不变。返回false。 * @param s * @return */public boolean check(String s) { boolean b = false; String tmp = s; tmp = tmp.replaceAll("\\p{P}", ""); if (s.length() != tmp.length()) { b = true; ...
Java随机数之ThreadLocalRandom学习
[TOC]
文章参考:https://blog.csdn.net/o9109003234/article/details/109523691
Java随机数之ThreadLocalRandom学习
[TOC]
文章参考:http://blog.csdn.net/xuxiaoxie/article/details/52095930
C++中高级面试题集锦
[TOC]
概述文章参考:https://mp.weixin.qq.com/s/B4zQhTxl8EL0astDch-G0w
C++ 是什么?C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式: 面向对象编程、泛型编程和过程化编程。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!
C和C++的区别?C++在C的基础上增添类,C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
C++面向对象什么是面向对象(OOP)?面向对象是一种对现实世界理解和抽象的方法、思想,通过将需求要素转化为对象进行问题处理的一种思想。
C++面向对象的特点封装、继承、多态
什么是多态?多态是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的 ...
C++面试题大全
[TOC]
概述文章参考:https://blog.csdn.net/qq_31442743/article/details/116119490
文章参考:https://www.zhihu.com/question/60911582
文章参考:https://developer.aliyun.com/article/709155
C++内存模型1.C/C++内存有哪几种类型C中,内存分为5个区:堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量)和常量存储区(常量)。此外,C++中有自由存储区(new)一说。
2.C++堆和栈的区别?1)堆存放动态分配的对象——即那些在程序运行时动态分配的对象,比如 new 出来的对象,其生存期由程序控制;
2)栈用来保存定义在函数内的非static对象,如局部变量,仅在其定义的程序块运行时才存在;
3)静态内存用来保存static对象,类static数据成员以及定义在任何函数外部的变量,static对象在使用之前分配,程序结束时销毁;
4)栈和静态内存的对象 ...