基础知识集合

https://blog.csdn.net/sheng_q/category_10901984.html?spm=1001.2014.3001.5482

字节流:面向字节的io流,音频 图片 歌曲 

byteArray/stringbuffer/file/piped/sequence /filter/data/buffer缓冲/lineNumber/pushedbackInputStream

byte/file/piped/filter/data/print/bufferedOutputStream

reader/writer:字符流 2个字节的Unicode字符 需要缓冲区, 转成字节放入硬盘

io

nio:同步非阻塞 多路复用基础

异步:用户进程read操作 去做其他事情 ,内核角度asynchronousread后 立刻返回,内核等待数据准备好 拷贝到用户内存 ,内核给用户发送signal

同步/异步:消息通信机制,发起调用等待结果

阻塞/非阻塞:等待调用结果时的状态,阻塞 结果返回之前会被挂起 得到结果才会返回

reactor:同步io 事件分离器 等待文件描述符 /socket读写操作准备就绪,处理器具体操作

proactor:异步io 是处理器也是分离器,io交给操作系统:数据缓冲区地址 数据大小

   异步情况下(Proactor),当回调handler表示I/O操作已经完成;

   同步情况下(Reactor),回调handler表示I/O设备可进行某个操作(can read or can write)

BIO:

同步阻塞,while循环服务端accept等待接收,接收到套接字上读写请求,不再接受其他的请求

NIO:

基于Reactor,有效的请求,对应一个线程,当连接没有数据时,是没有工作线程来处理的

事件驱动/避免多线程/单线程多任务/非阻塞IO /基于block传输/零拷贝/io多路复用

零拷贝:

fileChannel:transferTo    transferFrom

  通道交叉连接到另一个通道,DMA文件内容复制到内核读缓冲区,数据从这个缓冲区复制另一与socket输出相关的内核缓冲区中,第三次复制DMA把socket关联的缓冲区中的数据复制到协议引擎上发送到网络上

优化:

   transferTo数据复制到内核缓冲区,描述符追加到socket关联的缓冲区中,DMA将缓冲区中数据传输给协议引擎

ServerSocketChannel:监听tcp连接SocketChannel

SocketChannel:连接tcp套接字的通道

AIO:

有流可读,可读流传入read方法的缓冲区,通知应用程序

select和epoll:select posix标准,epoll上linux

   select句柄数目受限,最多1024个 ;epoll没有 限制最大的打开文件句柄数目

   epoll不会随fd数量增长而降低效率,select轮询 数组,epoll队列 只操作活跃socket(callback)

解决:io多路复用,描述符列表 调用函数 直到其中一个准备好才返回, 告诉进程哪些IO就绪

NIO技术概览 | Idea Buffer

epoll

    事件驱动的I/O模型,同时处理大量的文件描述符

    内核与用户空间mmap共享一个事件表:监控的文件描述符以它们的状态,当状态变化,内核将事件通知给用户空间,用户空间根事件类型进行相应的处理

epoll_create(内核空间)创建文件描述符epfd

   ep_alloc建初始化eventpoll

       eventpoll:被监听socket列表rbr(epitem)/等待队列wq/就绪socket列表rdllist(wait方法从其取)

       epitem:红黑树rbn/rdllink就绪列表/ffd引用描述符/pwqlist等待队列/eq含当前的eventpoll对象指针/event感兴趣的事件和源fd

   anon_inode_getfd把wventpoll映射到文件描述符

epoll_ctl:添加或删除要监听的socket(到epfd)

epoll_wait等待数据

bean实例化与依赖注入

属性注入:javaBean中存在默认构造函数 设置方法

Spring系列-3 Bean实例化与依赖注入_实例化包括属性注入嘛-CSDN博客

循环依赖:提前暴露引用

/**创建好的对象 实例化 属性设置 初始化Cache of singleton objects: bean name to bean instance*/
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

/**半成品对象Cache of early singleton objects: bean name to bean instance. */
private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);

/**构造bean对象的lambda表达式,bean对象创建工厂Cache of singleton factories: bean name to ObjectFactory.(被代理的)对象 */
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

三级缓存作用

   如果需要代理 初始化阶段的aop提前至属性设置阶段,引入this.earlyProxyReferences标志(map)

   lambda表达式并执行获取代理对象

二级缓存作用

  第一次通过lambda表达式得到代理对象,将代理对象存入二级缓存并删除三级缓存

  第二次直接从二级缓存中查询,而不需要再次执行lambda表达式

inject:

  根据beanName等信息获取待注入的值; 通过反射完成属性注入

国际化

  Locale类国际化类型,包含国家和地区

 准备国际化文件:资源名_语言_国家/地区.properties(只能含ASCII字符)

refresh()的步骤中存在initMessageSource()

springboot 通过spi spring.factories中MessageSourceAutoConfiguration @ConditionalOnMissingBean

JsonDeserializer 自定义 

高并发优化:

高并发扣减库存:

   提交订单-库存,支付时效,超过自动取消订单 还原库存

   token校验/防多次刷单 拉黑/ redis先操作 扣减库存 支付的时候再实际扣减库存

      扣减明细 流水 /  缓存扣减 / 扣减库  +MQ

   定期检查redis/数据库 一致性; 异步更新缓存canal

https://blog.csdn.net/sheng_q/category_10901984.html?spm=1001.2014.3001.5482

线程池:

corePoolSize:核心

maximumPoolSize 核心+非核心

threadFactory工厂:释放守护/优先级 

blockingQueue:

  • LinkedBlockingQueue链式阻塞队列Integer.MAX_VALUE,无限创建队列
  • ArrayBlockingQueue数组阻塞队列,需要指定队列的⼤⼩
  • SynchronousQueue同步队列,内部容量为0,每个put操作必须等待⼀个take操作
  • DelayQueue延迟队列,当其指定的延迟时间到了,才能够从队列中获取到该元素

rejectedExecutionHandler拒绝策略:

  • AbortPolicy丢弃任务并抛RejectedExecutionException异常
  • DiscardPolicy丢弃新来的任务
  • DiscardOldestPolicy丢弃队列头部(最旧)任务 重新尝试执⾏程序(如果失败,重复此过程)
  • CallerRunsPolicy调⽤线程来处理该任务

newCachedThreadPool 很多短时间的任务时,线程复⽤率⽐较⾼,非核心线程 先入队

    0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>()

newFixedThreadPool只创建核⼼线程

    nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()

newSingleThreadExecutor

   1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()

newScheduledThreadPool定⻓线程池,⽀持定时及周期性任务执⾏

    corePoolSize, Integer.MAX_VALUE, DEFAULT_KEEPALIVE_MILLIS, MILLISECONDS, new DelayedWorkQueue()

【多线程】线程池里边都有些什么东西呢_当队列满了,核 线程空闲、扩展线程也空闲,谁从队列 获取?-CSDN博客百度安全验证

object.finalize在垃圾收集器删除对象之前对这个对象调用的

SynchronousQueue: 公平内部TransferQueue队列:头尾两个指针队尾匹配队头出队,先进先出

                非公平TransferStack栈,head指针 CAS

跳表:结点可含很多个指向后续结点的指针,可跳过不必要结点,加快查找、删除等。链表内每一个结点包含多少个指向后续元素的指针,通过一个随机函数生成器得到

concurrentHashMap:

java1.7与1.8

1.7 switch支持字符串,catch可分配更多空间 自动释放资源

1.8 lambda表达式 stream流  函数式编程 

collection

list/set/map:

hashset:可null 基于hashmap 非线程安全

linkedHashset:继承hashset 可null linkedHashSet有linkedhashmap 双向链表和hashmap 非安全

treeset:不null  treemap 红黑树 次序,非安全

   自然排序:comparable ;比较排序java.util的comparator

list:有序 🉑️重 ,顺序索引 

arraylist:可null 数组实现 动态增长/再分配object数组 非线程安全

linkedlist:可null 双端链表 队列和栈 ,deque继承queue 非线程安全

stack 继承vector 模拟栈 先进后出 线程安全 

queue:FIFO 新元素插入到队尾 访问元素返回队头

priorityQueue:不null 二叉堆底层,队列大小重新排序

arrayDeque:基于数组双端队列,arraylist类似 底层动态/可重分配object数组存储集合元素

map:映射关系

hashmap:1.7 散列表+链表,1.8散列表+链表+红黑树 非线程安全

linkedhashmap:继承hashmap,双向链表+hashmap 非线程安全

treemap:sortedMap,红黑树 非安全

hashtable 线程安全

ArrayList和LinkedList:

 arraylist动态数组,随机访问get/set,指定位置插入 arraycopy耗时

 linkedList双向链表,for循环获取元素,index<size/2,左边查 否右边查

    数据量大 插入数据 arraylist优势大 特别是后面位置查入

java集合框架05——ArrayList和LinkedList的区别-CSDN博客

Kunbernetes(k8s)的基本概念详解+部署_kuburnetes-CSDN博客

安全验证 - 知乎

linkedHashMap

双向链表,有序;key value容许为空 ;key被覆盖 value可重复  ; 非线程安全

HashMap 操作数据结构 +LinkedList 维护插入元素顺序

K key;
V value;
Entry<K, V> next;//HashMap指定table位置上(链表)连接的Entry
int hash;

Entry<K, V> before;
NEtry<K, V> after;

//链表的头结点 入口节点不存数据
private transient Entry<K,V> header;
//该属性指取得键值对的方式,是个布尔值,false表示插入顺序 默认,true表示访问顺序,也就是访问次数.
private final boolean accessOrder;

accessOrder=false,put 新元素加入哈希桶 加入双向链表末尾

accessOrder=true,put新元素 哈希冲突 key同替换 双向链表尾部 超过上限removeEldestEntry返true 删除最早元素 方便新元素插入,无冲突放入 加入双向链表尾部,get到的元素添加双向链表尾部

LRU:最久未访问header指向的元素,继承linkedhashmap重写removeEldestEntry设置缓存大小

Java基础汇总(十六)——LinkedHashMap-CSDN博客

LinkedHashMap的底层原理_linkedhashmap底层-CSDN博客

红黑树

平衡二叉查找树,节点非红即黑,根节点/叶子节点黑色

红色节点必须有两个黑色子节点,任一节点到叶子节点含相同数目的黑色节点

安全验证 - 知乎

事务原理 aop 动态代理

mybatis 读取mybatis.xml配置文件 configuration 

  映射关系:mapper.class 代理工厂 

  enviroment 数据库环境 datasource /事务工厂JdbcTransaction ManagedTransaction/连接池

  其他信息:xml配置文件的其他信息

 当用户以目标对象类型从IOC获取Bean对象时, 得到的是代理对象; 当调用目标对象的方法时, 被增强器TransactionInterceptor所拦截, 并进入invoke方法

虚拟内存:

     内存页struct page 4k,调度以页为单位进行,mem_map管理,虚拟内存 struct mm_struct  物理内存映射,pgd属性中(物理)页的起始地址(fork进程时创建自己独立页表mm_struct)

    每个进程的虚拟内存空间相互隔离,有属于自己的页表,管理虚拟内存空间映射关系 访问物理内存的权限

      PTE 保存了进程虚拟内存空间中的虚拟页与物理内存页的映射关系,以及控制物理内存访问的相关权限位,内核先从虚拟内存地址中提取出 页表内偏移 ,根 页表起始地址 + 页表内偏移 * sizeof(PTE) 获取到该虚拟内存地址所在虚拟页在页表中对应的 PTE 了

一步一图带你构建 Linux 页表体系 —— 详解虚拟内存如何与物理内存进行映射_虚拟内存 页表 物理内存-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/563114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第十二届蓝桥杯C/C++ B组 杨辉三角形(二分查找+思维)

3418. 杨辉三角形 - AcWing题库 题目描述: 思路&#xff1a; 从上图片中&#xff0c;我们可以看出来这是一个对称图形&#xff0c;所以我们只看左半部分就可以了&#xff0c;我们一行一列去做数据量是1e9这样会很麻烦&#xff0c;所以我们这里做一个思想转换&#xff0c;斜着…

打破国外垄断|暴雨发布纯血国产电脑

要说现在国产手机这边已然进入纯自研模式&#xff0c;但电脑这边却还是仍未打破国外技术垄断。但就在刚刚&#xff0c;暴雨发布自研架构台式机open Station X &#xff0c;这是纯血鸿蒙系统之后国产又一款纯血产品发布&#xff01;标志的我们已经彻底打破西方在硬件及软件方面的…

vulfocus靶场thinkphp命令执行cve-2018-1002015

thinkPHP 5.0.x版本和5.1.x版本中存在远程代码执行漏洞&#xff0c;该漏洞源于ThinkPHP在获取控制器名时未对用户提交的参数进行严格的过滤。远程攻击者可通过输入‘&#xff3c;’字符的方式调用任意方法利用该漏洞执行代码 开启靶场&#xff1a; 使用工具&#xff1a; think…

NewStarCTF 2023 web

目录 week1 泄漏的秘密 Begin of Upload Begin of HTTP ErrorFlask Begin of PHP R!C!E! EasyLogin week2 游戏高手 include 0。0 ez_sql Unserialize&#xff1f; Upload again! R!!C!!E!! week3 Include &#x1f350; medium_sql POP Gadget GenShin wee…

JDBC学习

DriverManager&#xff08;驱动管理类&#xff09; Drivermanager的作用有&#xff1a; 1.注册驱动&#xff1b; 2.获取数据库连接 Class.forName("com.mysql.cj.jdbc.Driver"); 这一行的作用就是注册Mysql驱动&#xff08;把我们下载的jar包加载到内存里去&…

使用easyexcel将csv转为excel

一.背景 供应商系统下载的csv文件不支持域控&#xff08;主要是第三方wps服务不能对csv文件加密&#xff0c;但是可以对office系列产品进行权限访问的加密控制&#xff09;。因此思路就改为现将csv文件转为excel文件&#xff0c;然后对excel文件进行加域控制。本文主要介绍如何…

基于IIoT的设备预测性维护设计

基于IIoT的设备预测性维护设计 一、引言 在工业物联网&#xff08;IIoT&#xff09;的背景下&#xff0c;设备预测性维护成为了一种关键的战略&#xff0c;能够帮助企业提前发现并解决设备故障&#xff0c;从而提高生产效率、减少停机时间&#xff0c;并降低总体维护成本。为了…

理解JMM

JMM 对volatile的理解 volatile 是java虚拟机提供轻量级的同步机制 1、保证可见性 2、不保证原子性 3、禁止指令重排 那么可见性与JMM相关 什么是JMM Java内存模型&#xff0c;不存在的东西&#xff0c;是一个概念&#xff0c;是一个约定 线程加锁前&#xff0c;必须读取…

【002_音频开发_基础篇_Linux音频架构简介】

002_音频开发_基础篇_Linux音频架构简介 文章目录 002_音频开发_基础篇_Linux音频架构简介创作背景Linux 音频架构ALSA 简介ASoC 驱动硬件架构软件架构MachinePlatformCodec ASoC 驱动 PCMALSA设备文件结构 ALSA 使用常用概念alsa-libALSA Open 流程ALSA Write 流程2种写入方法…

基础SQL DDL语句

MySQL的DDL&#xff08;Data Definition Language&#xff09;语句用于定义或修改数据库结构。 DDL数据库操作 查看所有的数据库 show databases; 红色圈起来的是系统数据库&#xff0c;是系统自带的 mysql&#xff1a;包含存储MySQL服务器运行时所需信息的表。这包括数据字典…

如何利用pg_dump和pg_restore迁移从一个PostgreSQL服务器到另一个服务器,同时保持一致性与高效性?

文章目录 解决方案1. 使用pg_dump导出数据2. 将导出的数据复制到目标服务器3. 使用pg_restore导入数据保持一致性与高效性的策略一致性高效性 示例代码导出数据复制数据到目标服务器在目标服务器上解压并导入数据 PostgreSQL数据库的迁移是一个常见的任务&#xff0c;特别是在升…

用Vue全家桶手工搓了一个高仿抖音源码 全开源

用Vue全家桶手工搓了一个高仿抖音&#xff0c;全开源 PC浏览器请用手机模式访问。先按F12调出控制台&#xff0c;再按CtrlShiftM切换到手机模式&#xff0c;手机请用Via浏览器或者Chrome浏览器预览。其他浏览器会强制将视频全屏&#xff0c;导致样式都失效。 运行项目&#x…

【C++】STL:vector常用接口的使用和模拟实现

Hello everybody!这篇文章主要给大家讲讲vector常用接口的模拟实现&#xff0c;STL库中的实现一层套着一层&#xff0c;十分复杂&#xff0c;目前阶段还不适合看源代码。而模拟实现可以让我们从底层上了解这些接口的原理从而更好的使用这些接口。另外我还会讲一些在vector使用过…

【第34天】SQL进阶-SQL高级技巧-Window Funtion(SQL 小虚竹)

回城传送–》《100天精通MYSQL从入门到就业》 文章目录 零、前言一、练习题目二、SQL思路初始化数据什么是Window Funtion窗口函数的分类语法结构第一种写法&#xff1a;第二种写法&#xff1a; 实战体验序号函数&#xff1a;row_number()序号函数&#xff1a;rank()序号函数&…

【树莓派Linux内核开发】入门实操篇(虚拟机Ubuntu环境搭建+内核源码获取与配置+内核交叉编译+内核镜像挂载)

【树莓派Linux内核开发】入门实操篇&#xff08;虚拟机Ubuntu环境搭建内核源码获取与配置内核交叉编译内核镜像挂载&#xff09; 文章目录 【树莓派Linux内核开发】入门实操篇&#xff08;虚拟机Ubuntu环境搭建内核源码获取与配置内核交叉编译内核镜像挂载&#xff09;一、搭建…

什么是0-day漏洞,怎么防护0-day漏洞攻击

随着信息技术的快速发展&#xff0c;网络安全问题日益凸显&#xff0c;其中0day漏洞攻击作为一种高级威胁手段&#xff0c;给企业和个人用户带来了极大的风险。下面德迅云安全就对0day漏洞攻击进行简单讲解下&#xff0c;并分享相应的一些安全措施&#xff0c;以期提高网络安全…

网络空间地图测绘理论体系白皮书(2023年)02网络空间测绘研究背景(想法比较好,着重看)

01前言 02 网络空间测绘研究背景 2.1 网络空间的起源 2.2 传统测绘理论 2.3 网络空间测绘相关工作 03 测绘体系框架概念定义 3.1 网络空间 3.2 网络空间地图测绘 3.3 体系框架总体思路 04 测绘体系框架应用实践 4.1 网络空间地形图 4.2 网络空间地志图 4.3 网络空间战略图 05 总…

Python 全栈安全(一)

原文&#xff1a;annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 序言 多年前&#xff0c;我在亚马逊搜索了一本基于 Python 的应用程序安全书。我以为会有多本书可供选择。已经有了很多其他主题的 Pyt…

【ZYNQ】Zynq 芯片介绍

Zynq 是 Xilinx 公司提出的全可编程 SoC 架构&#xff0c;集成了单核或多核 ARM 处理器与 Xilinx 16nm 或 28nm 可编程逻辑&#xff0c;包括 Zynq 7000 Soc&#xff0c;Zynq UltraScale MPSoC 和 Zync UltraScale RFSoC 等系列。本文主要介绍 Xilinx Zynq 7000 系列芯片架构、功…

Hadoop1X,Hadoop2X和hadoop3X有很大的区别么?

Hadoop的演进从Hadoop 1到Hadoop 3主要是为了提供更高的效率、更好的资源管理、更高的可靠性以及对更多数据处理方式的支持。下面是Hadoop 1, Hadoop 2, 和 Hadoop 3之间的主要区别和演进的原因&#xff1a; Hadoop 1 特点&#xff1a; 主要包括两大核心组件&#xff1a;HDFS&a…