面试整理之基本类型1:java几种基本类型大小关键字类型位数(8位一字节)取值范围(表示范围)byte整型82^72^71short整型162^152^151int整型322^312^311long整型642^632^631float浮点数323.402823e+381.401298e45double浮点数641.797693e+3084.9000000e324char文本型1602^161boolean布尔值328truefalseboolean的占用大小是多少,有如下说法1bit:boolean编译后的是使用1和0储存,理论上只需1bit即可储存1byte:计算机处理数据的最小单...
2023-12-05 10:47:14 1753浏览 0点赞 0回复 0收藏
先介绍下多进程多线程在linux几种通信方式管道:管道的实质是一个内核缓冲区,需要通信的两个进程各在管道的两端,进程利用管道传递信息信号:信号是软件层次上对中断机制的一种模拟,进程不必阻塞等待信号的到达,信号可以在用户空间进程和内核之间直接交互消息队列:消息队列是消息的链表,存放在内存中并由消息队列标识符标识,允许多个进程向它写入与读取消息共享内存:多个进程可以可以直接读写同一块内存空间,是针对其他...
2023-12-05 10:46:39 2408浏览 0点赞 0回复 0收藏
随着多进程多线程的出现,对共享资源(设备,数据等)的竞争往往会导致资源的使用表现为随机无序例如:一个线程想在控制台输出"Iamfine",刚写到"Iam",就被另一线程抢占控制台输出"naughty",导致结果是"Iamnaughty";对于资源的被抢占使用,我们能怎么办呢?当然不是凉拌,可使用锁进行同步管理,使得资源在加锁期间,其他线程不可抢占使用1锁的分类悲观锁○悲观锁,每次去请求数据的时候,都认为数据会被抢占更新(悲观的想法)...
2023-12-05 10:46:09 3904浏览 0点赞 0回复 0收藏
8Executors的四种线程池浅析「newFixedThreadPool」指定核心线程数,队列是LinkedBlockingQueue无界阻塞队列,永远不可能拒绝任务;适合用在稳定且固定的并发场景,建议线程设置为CPU核数Executors.javapublicstaticExecutorServicenewFixedThreadPool(int{returnnewThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueue<Runnable>());}「newCachedThreadPool」核心池大小为0,线程池最大线...
2023-12-05 10:45:28 3646浏览 0点赞 0回复 0收藏
进程是执行程序的实体,系统的调度执行单元,拥有独属的进程空间(内存、磁盘等)。而线程是进程的一个执行流程,一个进程可包含多个线程,共享该进程的所有资源:代码段,数据段(全局变量和静态变量),堆存储;但每个线程拥有自己的执行栈和局部变量进程创建要分配资源,进程切换既要保存当前进程环境,也要设置新进程环境,开销大;而线程共享进程的资源,共享部分不需重分配、切换,线程的创建切换是小于进程的。因此更偏向使...
2023-12-05 10:44:54 3831浏览 0点赞 0回复 0收藏
6URL概念及与URL的区别URL全称是UniformResourceLocation,统一资源定位符URL就是URI的子集,它除了标识资源,还提供找到资源的路径;在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析,而URL类可以打开一个到达资源的流同属URI子集的URN(统一资源名称),只标识资源名称,却不指定如何定位资源;如:mailto:clswclgmail.com就是一种URN,知道这是个邮箱,却不知道该怎么查找定位通俗就是,...
2023-12-05 10:44:20 3087浏览 0点赞 0回复 0收藏
1JAVA.IO字节流LineNumberInputStream和StringBufferInputStream官方建议不再使用,推荐使用LineNumberReader和StringReader代替ByteArrayInputStream和ByteArrayOutputStream○字节数组处理流,在内存中建立一个缓冲区作为流使用,从缓存区读取数据比从存储介质(如磁盘)的速率快用ByteArrayOutputStream暂时缓存来自其他渠道的数据ByteArrayOutputStreamdatanewByteArrayOutputStream(1024);1024字节大小的缓存区data.write(Sy...
2023-12-05 10:43:54 3385浏览 0点赞 0回复 0收藏
1JVM的内存区域布局java代码的执行步骤有三点○java源码文件>编译器>字节码文件○字节码文件>JVM>机器码○机器码>系统CPU执行JVM执行的字节码需要用类加载来载入;字节码文件可以来自本地文件,可以在网络上获取,也可以实时生成。就是说你可以跳过写java代码阶段,直接生成字节码交由JVM执行其中Java虚拟机栈、程序计数器、Heap、本地方法栈、Metaspace属于JVM运行时的内存;按是否线程共享则可以分两类JAVA堆和MetasSpace元空...
2023-12-05 10:43:28 3494浏览 0点赞 0回复 0收藏
1四种内部类成员内部类静态内部类局部内部类匿名内部类2内部类的使用场景和优点内部类的优点:每个内部类都能独立地继承一个类(实现多个接口),无论外部类是否已经继承或者实现,对于内部类都没有影响。内部类的存在使得Java的多继承机制变得更加完善在开发设计中会存在一些使用接口很难解决的问题,而类却只能继承一个父类。这个时候可以利用内部类去继承其他父类,及implements多个接口能力来解决。内部类使得多重继承的解决...
2023-12-05 10:41:29 1941浏览 0点赞 0回复 0收藏
1对象的实例化过程对象的实例化过程是分成两部分:类的加载初始化,对象的初始化要创建类的对象实例需要先加载并初始化该类,main方法所在的类需要先加载和初始化类初始化就是执行<clinit>方法,对象实例化是执行<init>方法一个子类要初始化需要先初始化父类2类的加载过程类的加载机制:如果没有相应类的class,则加载class到方法区。对应着加载>验证>准备>解析>初始化阶段○加载:载入class对象,不一定是从class文件获取,可以...
2023-12-05 10:40:57 3205浏览 0点赞 0回复 0收藏
方法中发生异常,会创建一个异常对象交给JVM处理,该异常对象包含异常名称,异常描述以及异常发生时应用程序的状态。创建异常对象并交给JVM的过程称为抛出异常。这会有一系列的方法调用,这系列方法调用的有序列表叫做调用栈JVM会顺着调用栈去查找看是否有可以处理异常的代码,当JVM发现可以处理异常的代码时,会把发生的异常传递给它。如果JVM没有找到可以处理该异常的代码块,JVM就会将该异常转交给默认的异常处理器,默认处...
2023-12-01 11:08:50 3535浏览 0点赞 0回复 0收藏
java实现注解的底层原理和概念java注解是JDK1.5引入的一种注释机制,java语言的类、方法、变量、参数和包都可以被注解标注。和Javadoc不同,java注解可以通过反射获取标注内容在编译器生成.class文件时,注解可以被嵌入字节码中,而jvm也可以保留注解的内容,在运行时获取注解标注的内容信息java提供的注解可以分成两类:作用在代码上的功能注解(部分):注解名称功能描述Override检查该方法是否是重写方法。如果发现其父类,或...
2023-12-01 11:07:45 2148浏览 0点赞 0回复 0收藏
1JAVA的Type类型体系先了解下java的Type类型体系(类的类>类型),Type是所有类型(原生类型Class、参数化类型Parameterizedtype、数组类型GenericArrayType、类型变量TypeVariable、基本类型Class)的共同接口;前两篇反射和注解讲到的Class<T>就是Type的一实现类Type下面又有四个子接口类ParameterizedType、TypeVariable、GenericArrayType、WildcardType○List<E>表示泛型,E是TypeVariable类型,List<String>则是Parameterize...
2023-12-01 11:06:10 2043浏览 0点赞 0回复 0收藏
前言大白话解释,零拷贝就是没有把数据从一个存储区域拷贝到另一个存储区域。但是没有数据的复制,怎么可能实现数据的传输呢?其实我们在javaNIO、netty、kafka遇到的零拷贝,并不是不复制数据,而是减少不必要的数据拷贝次数,从而提升代码性能零拷贝的好处内核空间和用户空间缓冲区和虚拟内存传统的IOmmap+write实现的零拷贝sendfile实现的零拷贝带有DMA收集拷贝功能的sendfile实现的零拷贝java提供的零拷贝方式零拷贝的好处...
2023-12-01 11:04:04 3329浏览 0点赞 0回复 0收藏
前言网络IO,可以理解为网络上的数据流。通常我们会基于socket与远端建立一条TCP或者UDP通道,然后进行读写。单个socket时,使用一个线程即可高效处理;然而如果是10K个socket连接,或者更多,我们如何做到高性能处理?基本概念介绍网络IO的读写过程linux下的五种网络IO模型多路复用IO深入理解一波Reactor模型Proacotr模型基本概念介绍进程(线程)切换○所有系统都有调度进程的能力,它可以挂起一个当前正在运行的进程,并恢复之...
2023-12-01 11:02:43 2022浏览 0点赞 0回复 0收藏
前言以前需要异步执行一个任务时,一般是用Thread或者线程池Executor去创建。如果需要返回值,则是调用Executor.submit获取Future。但是多个线程存在依赖组合,我们又能怎么办?可使用同步组件CountDownLatch、CyclicBarrier等;其实有简单的方法,就是用CompletableFuture线程任务的创建线程任务的串行执行线程任务的并行执行处理任务结果和异常多任务的简单组合取消执行线程任务任务结果的获取和完成与否判断1创建异步线程任...
2023-12-01 11:01:55 2970浏览 0点赞 0回复 0收藏
一、docker简介环境配置软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个Python应用,计算机必须有Python引擎,还必须有各种依赖,可能还要配置环境变量。如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:"它在我的机器可以跑了"...
2023-12-01 11:01:02 2234浏览 0点赞 0回复 0收藏
前言在使用多线程并发编程的时,经常会遇到对共享变量修改操作。此时我们可以选择ConcurrentHashMap,ConcurrentLinkedQueue来进行安全地存储数据。但如果单单是涉及状态的修改,线程执行顺序问题,使用Atomic开头的原子组件或者ReentrantLock、CyclicBarrier之类的同步组件,会是更好的选择,下面将一一介绍它们的原理和用法原子组件的实现原理CASAtomicBoolean、AtomicIntegerArray等原子组件的用法、同步组件的实现原理Reent...
2023-12-01 10:52:49 3434浏览 0点赞 0回复 0收藏
前言jdk8之前我们一直在用Date、Calender和SimpleDateFormat,但它的API不够强大,还存在线程安全问题,一直被人诟病。jdk8提供了新的时间API,在java.time包里的类是不可变且线程安全的,它和Joda是同一个作者实现的,因此借鉴了Joda很多特点,如果你用习惯Joda,可以很方便地切换到java.time类的使用java.time类的简单介绍Date和time做下区分,Date(日期)的单位是年月日。time(时间)的单位是时分秒类描述Instant时间戳...
2023-12-01 10:51:55 3468浏览 0点赞 0回复 0收藏
前言上次朋友关于TCPIP面试的后续,主要是https的相关面试要点,请看下文面试官:HTTPS它的认证加密过程是怎样,它怎么保证内容不会被篡改朋友:1,https是基于tcp协议的,客户端先会和服务端发起链接建立朋友:2,接着服务端会把它的证书返回给客户端,证书里面包括公钥S.pub、颁发机构和有效期等信息朋友:3,拿到的证书可以通过浏览器内置的根证书(内含C.pub)验证其合法性朋友:4,客户端生成随机的对称加密秘钥Z,通过服...
2023-12-01 10:49:37 1816浏览 0点赞 0回复 0收藏