面试总结
文章平均质量分 69
you are so cute
学无止境
展开
-
Netty常问面试题
Netty的使用其实需要开发人员定义各种Handler,合理的运用ChannelPipeline中各种入站、出站的Handler处理业务逻辑,在不同的Handler流转中就涉及粘包半包、序列化反序列化、编解码问题。Netty是一个很强大的网络交互框架,具体的使用还得参考其源码学习相关知识,我这里只是简单的记录下面试过程中面试官问到的一些相关问题(简历上写用过Netty) 1.解决粘包半包问题: a.在包尾增加分隔符;netty自带的回车换行分隔符,或者自定义分隔符 b.消息定长;例如每个报文长度大小2原创 2021-07-20 19:46:05 · 121 阅读 · 0 评论 -
说说BIO和NIO
BIO:同步阻塞IO BIO是面向流的,用流读取数据,读/写时线程都会阻塞;socket通讯就是BIO的很好的例子 代码写一个BIO: Server端 package com.bio.demo.bio; import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.原创 2021-07-19 20:19:20 · 73 阅读 · 0 评论 -
面试官:请说下什么是JMM?
JMM:JAVA 内存模型,在JSR133里指出了JMM是用来定义一个一致的、跨平台的内存模型,是缓存一致性协议,用来定义数据读写的规则。 1.内存可见性 在Java中,不同的线程拥有各自的私有工作内存,当线程执行过程中需要读取或者修改某个变量时,需要从主存中拿到变量的值放到自己工作内存的变量副本中, 当线程中对该变量做了修改之后,其他线程并不能直接读取到修改后的值(因为他只存在于当前操作线程的工作内存中),需要把修改后的值刷新到主存中,其他线程才能从主内存读取到修改后的值。 read->l原创 2021-07-08 18:51:55 · 153 阅读 · 0 评论 -
线程池中线程的提交和结束
之前讲了线程池的创建和使用,今天讲下线程的提交和终结 1.提交任务 1.1 void execute(Runnable task); 提交一个任务,没返回值 1.2 Future<?> submit(Runnable task); 提交一个任务,有返回值 public class ThreadPool1 { public static void main(String[] args) { ExecutorService executorService = E原创 2021-07-07 19:13:33 · 685 阅读 · 0 评论 -
线程池的工厂方法及其使用
在我之前的文章中已经讲解了线程池的构造方法以及使用,本篇文章主要讲解工作中经常用到的三种线程池的创建及使用 1、线程池状态 补充下知识点:线程池的几种状态(这点应该在上一篇文章中讲到的https://blog.csdn.net/weixin_45418455/article/details/118513730#comments_17386551) ThreadPoolExecotor使用int的高3位来表示线程池状态,低29位表示线程数量 状态 value 描述 RUNNING--线原创 2021-07-06 19:15:56 · 1065 阅读 · 0 评论 -
线程池原理及使用
1.线程池核心参数含义 线程池源码,咱们先依次介绍下各个参数的含义: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue&原创 2021-07-06 11:20:58 · 187 阅读 · 1 评论 -
HashMap面试常问知识点
hashMap做为一种代码中常用的数据结构,面试官经常会问一些此类问题,下面是我面试过程中面试官问到的问题,加以整理。 hashMap 底层原理 1.1 简单的回答,hashMap的底层实现是数组实现,解释如下: HashMap<String,String> map = new HashMap<String,String>(); map.put("name","张三"),对key进行hash运算,得到一个hashCode与数组长度n进行取模运算(数组长度假设为n),可以定位到原创 2021-07-05 17:20:32 · 79 阅读 · 0 评论