App 没有死:Agent 只是把软件入口改成了自然语言
通用 Agent 没有失败,传统 App 也不会消失。真正可靠的 AI 应用,正在把自然语言交给模型,把事实、状态、权限和执行留给确定性系统,再用 GUI 完成展示与确认。
公众号记录正在发生的 AI 变化,技术博客保存可以反复查阅的工程笔记。
关注人工智能与 AIGC,更偏向当下、判断和可读性。新文章优先发布在公众号,部分长文同步到这里。
通用 Agent 没有失败,传统 App 也不会消失。真正可靠的 AI 应用,正在把自然语言交给模型,把事实、状态、权限和执行留给确定性系统,再用 GUI 完成展示与确认。
从早期学习记录到现在的 Agent 工程实践,按时间保留完整轨迹。
(129条消息) 深入理解 MySQL ….md 数据库优化和查询优化方案 数据库优化方案 优化索引,sql语句,分析慢查询 设计表的时候严格按照数据库设计规范来设计数据库 使用缓存,把经常访问并且不需要经常变化的数据放在缓存中,能够节约磁盘IO 优化硬件,采用ssd,使用磁盘队列技术(RAID0,…
1. 什么是虚拟内存?解决了什么问题? 虚拟内存是操作系统内存管理的一种技术,每个进程启动时,操作系统会提供一个独立的虚拟地址空间,这个地址空间是连续的,进程可以很方便的访问内存,这里的内存指的是访问虚拟内存。 虚拟内存的目的,一是方便进程进行内存的访问,二是可以使有限的物理内存运行一个比它大很多的…
进程间8种通信方式详解 进程通信: 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。 1 匿名管道通信…
1. HTTP存在的问题 传统的不使用SSL/TLS的HTTP协议,是不加密的通信。无论是客户端发送给服务端的请求体,还是服务端响应给客户端的响应体,都是明文传输的,这会带来几个问题: 1. 窃听 第三方劫持请求后可以获取通信内容。对于一些敏感数据,这是不被允许的。 2. 篡改 第三方劫持请求后可以…
什么是事务? 事务( ),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务通常由高 级数 据库操作语言或编程语言(如 SQL,C++ 或 Java)书写的用户程序的执行所引起,并用形如 和 语句(或函数调用)来界定。事务由事务开始( )和事务结束…
前言 什么是持久化 : Redis读写速度快、性能优越是因为它将所有数据存在了内存中,然而,当Redis进程退出或重启后,所有数据就会丢失,所以我们希望Redis能保存数据到硬盘中,在Redis服务重启之后,原来的数据能够恢复,这个过程就叫持久化.- MySQL的InnoDB存储引擎通过 redo…
一道面试中常考的并发编程的代码题: 三个线程T1、T2、T3轮流打印ABC,打印n次,如ABCABCABCABC……. 两个线程交替打印1-100的奇偶数 N个线程循环打印1-100 …… 其实这类问题本质上都是线程通信问题,思路基本上都是一个线程执行完毕,阻塞该线程,唤醒其他线程,按顺序执行下一个…
Linux系统之进程状态 D:uninterruptible sleep (usually IO) R:running or runnable (on run queue) S:interruptible sleep (waiting for an event to complete) T:stop…
05.Netty服务启动 之前讲过的 EchoServer: 问题 通过前面使用案例的学习,我们知道,Netty 启动的时候主要是下面这行代码: 这里主要有两个方法,一个是 bind (),一个是 sync (),sync () 属于 ChannelFuture 的范畴,我们之后再说: Netty…
编写Netty应用程序 从 工程下抄了一份 EchoServer 过来,并删减了部分代码,归纳出来一份编写 Netty 服务端程序的模板,我把它称为 “Netty 编码十步曲”。 1. 声明线程池(必须) 一般来说,我们会声明两个 Group,一个是 bossGroup,用于处理 Accept 事件…
03.Java NIO的核心组件 Channel 什么是 Channel 呢? 让我们来看看 JDK 怎么说: // java.nio.channels.Channel A nexus for I/O operations. A channel represents an open connecti…
IO 多路复用实现机制 概念说明 IO 多路复用有三种实现,在介绍select、poll、epoll之前,首先介绍一下Linux操作系统中 基础的概念 : 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间 / 内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统…
I/O 五种IO模型 前言 为了加深对 I/O多路复用机制 的理解,以及了解到多路复用也有局限性,在这里我们先回顾下 Unix网络编程中的五种IO模型 。 Blocking IO - 阻塞IO NoneBlocking IO - 非阻塞IO IO multiplexing - IO多路复用 sign…
单机部署 部署条件: JDK 1.8.0_322 Maven Apache Maven 3.5.4 下载源码 打开 RocketMQ release_notes 页面,我们可以看到 RocketMQ 所有的发布版本。这里,我们选择最新的 RocketMQ 4.6.0 版本。点击进入该版本的发布页面后…
概述 阿里巴巴消息中间件起源于 2001 年的五彩石项目, Notify 在这期间应运而生,用于交易核心消息的流转 。 2010 年, B2B 开始大规模使用 ActiveMQ 作为消息内核,随着阿里业务的快速发展,急需一款支持顺序消息,拥有海量消息堆积能力的消息中间件, MetaQ 1.0 在 2…
select、poll和epoll区别 select单个进程可监视的fd数量受到限制,epoll和select都可实现同时监听多个I/O事件的状态。 select 基于轮训机制 epoll基于操作系统支持的I/O通知机制 epoll支持水平触发和边沿触发两种模式。 1 select select本质…
ping 的工作原理 正文 IP协议的助手 —— ICMP 协议 ping 是基于 协议工作的,所以要明白 ping 的工作,首先我们先来熟悉 ICMP 协议 。 ICMP 是什么? ICMP 全称是 Internet Control Message Protocol ,也就是 互联网控制报文协议…
策略模式 策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。 何时使用:一个系统有许多许多类,…
海量数据处理的问题总结 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 解决办法呢?针对时间,需要采用巧妙的算法配合合适的数据结构,如 / / / / 或 / 树。针对空间,大而化…
面经1 1.JVM内存分区 https://leslieaibin.github.io/2020/11/10/JVM/1.Java%E5%86%85%E5%AD%98%E5%8C%BA%E5%9F%9F%E7%AE%80%E4%BB%8B/ 2.对象加载在哪里,一定不能在栈上吗,为什么不直接在栈上。…
1.http三次握手,状态码,交互细节 2.为什么要三次握手 3.四次挥手,状态码,传输细节,为什么握手要三次,挥手要四次 4.数据链路层怎么传输数据的,展开说说 : 在每个网络层数据报在传输之前,几乎所有的链路层协议都会将数据报用链路层封装起来。数据链路层从网络层获取数据后将其封装成为 ,如果帧太…
字符串 输出 CMS 能不能 初始标记 并发标记 重新标记 并发清理 去掉重新标记 1 浮动垃圾 如图,GC 线程便利对象树(实际是图),遍历过了A ,然后遍历过了B,遍历到了C,但是还没有遍历完C的儿子D,这时候如果 A.B=null; 那么B就变成了浮动垃圾,本次GC 过程B不会被清除。只能下次…
····················································· RPC和HTTP的比较 HTTP 和 RPC 其实是两个维度的东西, HTTP 指的是通信协议。 而 RPC 则是远程调用,其对应的是本地调用。 RPC 的通信可以用 HTTP 协议,也可以自…
定位问题的先决条件 需要有详细的日志记录,提前告警的监控平台,事发现场保留 日志 :业务日志,中间件日志 监控 :CPU、内存、磁盘、网络,类加载、GC、线程等 快照 :-XX:+HeapDumpOnOutOfMemoryError 和 -XX:HeapDumpPath 分析问题,解决问题的思路 经…
小知识 在实际项目中,我们经常需要聚合统计,比如统计一个年龄在20-30,喜欢看技术书籍,喜欢听音乐,喜欢宅在家的程序员等等一系列标签的用户。 如果使用mysql求并集,首先语句随着标签变长而变长,其次聚合,分组,去重严重影响语句性能。这种情况如何解决? 比如现在比较火的面试题,在10亿整数中找出1…
RPC框架手撕之路—java反射以及动态代理机制 在上一篇文章中,我们提到了,RPC框架所需要的java基础,第一点就是java的动态代理机制,动态代理机制的基础是反射,无论是在实际编程或者是面试时,都是java知识的重中之重。 定义: 在运行状态中,对于任意一个类,都能够知道这一个类的所有属性和方…
在做系统优化时,想到了将数据进行分级存储的思路。因为在系统中会存在一些数据,有些数据的实时性要求不高,比如一些配置信息。 基本上配置了很久才会变一次。而有一些数据实时性要求非常高,比如订单和流水的数据。所以这里根据数据要求实时性不同将数据分为三级。 第1级:订单数据和支付流水数据;这两块数据对实时性…
准备知识 理想情况下,线程A拿到锁,执行完后释放锁,线程B恰好到来顺手接下这把锁,一切都那么完美的话,也没必要加锁了,问题就在于在A没释放锁时,后续线程也想得到这把锁,所以只好让这些等待的线程进行排队,进而需要一套数据结构来组织这个队伍: Node结点:作为获取锁失败线程的包装类, 组合了Threa…
常见写法安全性及效率分析 假设我们的商品表的schema是下面这样的: 设置为字段无符号解决 这种做法大家的想法是我们将库存字段设置成无符号类型,这样当库存字段在sql执行时候被置为负数的时候mysql就会报错,那么affectRow就会是0或者可以捕获到这个异常,从而实现并发下的数据安全。 解法释…
RabbitMQ消费幂等性 什么是幂等性 幂等性,简单来说就是 对于同一个系统,在同样条件下,一次请求和重复多次请求对资源的影响是一致的,就称该操作为幂等的 。比如说如果有一个接口是幂等的,当传入相同条件时,其效果必须是相同的。在RabbitMQ中消费幂等就是指给消费者发送多条同样的消息,消费者只会…
MQ 的问题 任何技术都会有利有弊,MQ 给整体系统架构带来很多好处,但也会付出一定的代价。 MQ 主要引入了以下问题: 系统可用性降低 :引入了 MQ 后,通信需要基于 MQ 完成,如果 MQ 宕机,则服务不可用。 系统复杂度提高 使用 MQ,需要关注一些新的问题: 如何保证消息没有 重复消费 ?…
Skip List–跳表 跳表是一种神奇的数据结构,因为几乎所有版本的大学本科教材上都没有跳表这种数据结构,而且神书《算法导论》、《算法第四版》这两本书中也没有介绍跳表。但是跳表插入、删除、查找元素的时间复杂度跟红黑树都是一样量级的,时间复杂度都是O(logn),而且跳表有一个特性是红黑树无法匹敌的…
1. 为什么要拆分数据库? 单体项目在构建之初, 数据库 的负载和数据量都不大,所以不需要对数据库做拆分,小型财务系统、文书系统、ERP系统、OA系统,用一个MySQL数据库实例基本就够用了。 就像《淘宝技术这十年》里面说到的,电商业务的数据量增长飞快,所以最开始的PHP+MySQL的架构已经不能满…
4种解决线程安全问题的方式 前言 线程安全问题,在做高并发的系统的时候,是程序员经常需要考虑的地方。怎么有效的防止线程安全问题,保证数据的准确性?怎么合理的最大化的利用系统资源等,这些问题都需要充分的理解并运行线程。当然关于多线程的问题在面试的时候也是出现频率比较高的。下面就来学习一下吧! 线程 先…
在看《Java并发编程的艺术》线程池这一块时,提到了要合理地配置线程池,要分析任务特性。任务的性质:CPU密集型、IO密集型和混合型。 CPU密集型和IO密集型 CPU密集型也是指计算密集型,大部分时间用来做计算逻辑判断等CPU动作的程序称为CPU密集型任务。该类型的任务需要进行大量的计算,主要消耗…
Java 反射和动态代理 简介 什么是反射 反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。 通过反射机制,可以在运行时访问 Java 对象的属性,方法,构造方法等。 反射的应用场景 反射的主要应用场景有…
Java双亲委派模型 一、前言 平时做业务开发比较少接触类加载器,但是如果想深入学习Tomcat、Spring等开源项目,或者从事底层架构的开发,了解甚至熟悉类加载的原理是必不可少的。 java的类加载器有哪些?什么是双亲委派?为什么要双亲委派?如何打破它?多多少少对这些概念了解一些,甚至因为应付面…
死锁概念,死锁产生的四个必要条件,如何避免和预防死锁 一、死锁概念 死锁是指两个或多个进程在执行的过程中,因为竞争资源而造成互相等待的现象,若无外力作用,它们都无法推进下去。- 1.在等待对方时占有不可抢占的资源- 举个例子,假设有P1,P2两个进程,都需要A和B两个资源,两个都等待另一个资源而不肯…
进程调度算法 先来先服务调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用F…
页面置换算法 地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移除内存,以便为即将调入的页面让出空间。而用来选择淘汰那一页的规则叫做页面置换算法。 最佳置换算法(OPT)(理想置换算法) 这是一种理想情况下的页面置换算法,但实…
Redis支持三种集群方案 主从复制模式 Sentiel(哨兵)模式 Cluster模式 Redis集群的三种模式 主从复制模式 主从复制作用 通过持久化功能,Redis保证了即使服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。但是由于数…
由于互联网公司的流量巨大,系统上线会做一个流量峰值的评估,尤其是像各种秒杀促销活动,为了保证系统不被巨大的流量压垮,会在系统流量到达一定阈值时,拒绝掉一部分流量。 限流会导致用户在短时间内(这个时间段是毫秒级的)系统不可用,一般我们衡量系统处理能力的指标是每秒的 或者 ,假设系统每秒的流量阈值是10…
IO IO (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作,通常用户进程中的一个完整IO分为两阶段:用户进程空间 – 内核空间、内核空间 – 设备空间(磁盘、网络等)。IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。 LINUX中进程无法直接操作…
Redist有五种基本数据结构: string、hash、set、zset、list 。这五种数据结构的底层数据结构有六种: 动态字符串SDS、链表、哈希表、跳表、整数集合、压缩链表 底层结构 Redis是用C语言写的,但是Redis并没有使用C的字符串表示(C是字符串是以 空字符结尾的字符数组),…
MQ的作用 消息队列在大型电子商务类网站,如京东、淘宝、去哪儿等网站有着深入的应用, 队列的主要作用是消除高并发访问高峰,加快网站的响应速度。 在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,会对数据库造成巨大的压力,同时也使得系统响应延迟加剧。 在使用队列后,用户的请求发…
Innodb引擎的4大特性 插入缓存(Insert Buffer/Change Buffer) 插入缓存之前版本叫insert buffer,现版本Change Buffer,主要提升插入性能,change buffer 是insert buffer的加强,insert buffer 只针对inse…
ABC联合索引生效问题 对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c)。 可以支持 a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分…
语句的执行过程如下: 客户端(通常是你的服务)发出更新语句” update t set b = 200 where id = 2 “ 并向MySQL服务端建立连接; MySQL连接器负责和客户端建立连接,获取权限,维持和管理连接; MySQL拿到一个查询请求后,会先到查询缓存看看(MySQL8.x已…
循环队列 一、普通队列的弊端 队列:是一种可以分别在两端进行增删的特殊线性表。既然是线性表,那么可以使用顺序存储和链式存储来实现,如果是链式存储的话,那么增删的复杂度都是O(1),这一点很好理解,应该只要修改一下指针就好了,如果是顺序存储的话,在队尾增加的时间复杂度是O(1),但是在队头进行删除的时…
ThreadLocal的数据结构 类有一个类型为 的实例变量 ,也就是说每个线程有一个自己的 。 有自己的独立实现,可以简单地将它的 视作 , 为代码中放入的值(实际上 并不是 本身,而是它的一个 弱引用 )。 每个线程在往 里放值的时候,都会往自己的 里存,读也是以 作为引用,在自己的 里找对应的…
ConcurrentHashMap跟HashMap,HashTable的对比 我们都知道HashMap不是线程安全的,所以在处理并发的时候会出现问题。 而HashTable虽然是线程安全的,但是是通过整个来加锁的方式,当一个线程在写操作的时候,另外的线程则不能进行读写。 而ConcurrentHas…
MySQL BinLog MySQL 的 Binlog 日志是一种二进制格式的日志,Binlog记录所有的DDL和DML语句(除了数据查询语句Select, show 等),以Event的形式记录,同时记录语句执行时间。 BInlog的 主要作用有两种: 数据恢复: 因为Binlog详细记录所有修改…
Spring Bean的生命周期 初始化 在创建此bean的bean工厂中设置bean的名称,在普通属性设置之后调用,在 方法之前调用 : 在普通属性设置之后,InitializingBean.afterPropertiesSet()之前调用 : 回调提供了自己的bean实例工厂,在普通属性设置之后…
Spring IoC Spring IoC容器 作用 控制反转即IoC(Inversion of Control),将传统上由程序代码直接控制的对象的调度权交给容器,通过容器来实现对象组件的装配和管理。所谓的”控制反转”概念就是对组件对象控制权的转移,从本身程序代码转到容器,Spring IOC 负…
Java内存模型(JMM) JVM内存模型指的是JVM的内存分区;而java内存模型是一种虚拟机规范 JMM就是Java内存模型(Java Mermory Model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。 所以Ja…
分布式锁 什么是锁 在单线程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量 而同步的本质是通过锁实现的。为了实现多个线程在一个时刻同一代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个必须每个线程…
1、使用dmesg命令查看系统日志 dmesg |grep -E ‘kill|oom|out of memory’,可以查看操作系统启动后的系统日志,这里就是查看跟内存溢出相关联的系统日志。- 2、这时候,需要启动项目,使用ps命令查看进程 - ps -aux|grep java 或者是 ps -e…
JVM——字符串常量池详解 引言 在Java开发中不管是前后端交互的JSON串,还是数据库中的数据存储,我们常常需要使用到String类型的字符串。作为最常用也是最基础的引用数据类型,JVM为String提供了字符串常量池来提高性能,本篇文章我们一起从底层JVM中认识并学习字符串常量池的概念和设计原…
背景 MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的…
一条SQL查询语句如何执行 MySQL可以分为Server层和存储引擎层两部分 Server层包括 连接器、查询缓存、分析器、优化器、执行器 等,涵盖了MySQL的大多数核心功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程,触发器,视图等。…
HTTP 的本质?HTTP 和 RPC 的区别? HTTP 的本质 首先你要明确 HTTP 是一个协议,是一个超文本传输协议。 它基于 TCP/IP 来传输文本、图片、视频、音频等。 重点来了 。 HTTP 不提供数据包的传输功能,也就是数据包从浏览器到服务端再来回的 传输 和它没关系。 这是 TC…
步骤 (1)DNS 解析 (2)TCP 连接 (3)发送 HTTP 请求 (4)服务器处理请求并返回 HTTP 报文 (5)浏览器解析渲染页面 (6)连接结束 详细内容 DNS解析 输入 IP,此时电脑发送一个 DNS 请求到本地 DNS 服务器(一般是网络接入服务商提供 eg:电信,移动); 本地…
一、TCP 报文段简介 在介绍三次握手和四次挥手之前,先来简单认识一下 TCP 报文段的结构- - TCP 首部包含以下内容,请留意其中的控制位,在三次握手和四次挥手过程中会频繁出现: 端口号 (Source Port and Destination Port):每个 TCP 报文段都包含源端和目的…
滑动窗口 我们都知道 TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个。 这个模式就有点像我和你面对面聊天,你一句我一句。但这种方式的缺点是效率比较低的。 如果你说完一句话,我在处理其他事情,没有及时回复你,那你不是要干等着我做完其他事情后,我回复你,你才能…
HashMap的实现原理 概述 HashMap是Java中对Map接口的实现类,是最常用的实现类中之一。主要有以下几个特性: HashMap中的key 和 value 都允许为null, 但最多智能拥有一个null的key HashMap不保证顺序性 HashMap非线性安全 HashMap的数据结…
索引 什么是索引 索引是一个单独的,存储在磁盘上的数据结构,包含着对数据表里所有记录的引用指针,使用索引可以快速记录找出在某个或多个列中有一特定值的行,所有MySQL列数据都可以被索引,所有MySQL列类型都可以被索引,对相关列使用时提高查询操作速度的最佳途径。 索引是在存储引擎中实现的,因此,每种…
MySQL事务 MySQL事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除该人员相关的信息,如信箱、文章等等,这样,这些数据库操作语句就构成一个事务 在MySql中只有使用了Innodb数据库引擎的数据库或表才支持事务 事务处理…
概述 什么是Redis Redis是一个使用C语言写成,凯源的高性能key-value非关系缓存数据库。他支持存储的value类型比较多,包括String(字符串)、list(集合)、set(集合)、zset(sorted-set–有序集合) 和 hash (哈希类型)。Redis都是基于缓存的,所…
前言 锁的状态总共有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁,这四种锁状态分别代表什么,为什么会有锁升级。在JDK1.6之前,synchronized还是一个重量级锁,是一个效率比较低下的锁,但在JDK1.6后,JVM为了提高锁的获取与释放效率(sychronized) 进行了优化…
java把异常作为一类,当做对象来处理。所有异常类的基类是Throwable类,两大子类分别是Error 和 Exception。 系统错误由Java虚拟机抛出,用Error类表示,Error类描述的是内部系统错误,例如Java虚拟机崩溃。这种情况仅凭程序自身是无法处理的,在程序中也不会对Error…
ThreadLocal介绍 官方介绍 从Java官方文档中描述:ThreadLocal类用来提供线程内部局部变量,这种变量在多线程环境下访问(通过get 和set 方法访问)时能保证各个线程的变量相对于独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,…
平衡二叉树 平衡二叉树是基于二分法的策略提高数据的查找速度的二叉树的数据结构 特点: 平衡二叉树是采用二分法思维把数据按规则组装成一个树型结构的数据,用这个树形结构的数据减少无关数据的检索,大大的提升了数据检索的速度;平衡二叉树的数据结构组装过程有以下规则: 非叶子节点只能允许最多两个子节点存在 每…
RabbitMQ如何保证消息队列的可靠性传输 生产者弄丢数据 生产者将数据发送到RabbitMQ的时候,可能数据就在半路丢失。此时RabbitMQ提供事务功能,就是生产者发送数据之前开启RabbitMQ事务channel.txSelect,然后发送消息,如果消息没有成功被RabbitMQ接受到,那么…
概述 java的内存模型 每个线程都有自己的本地内存空间(java栈中的帧),线程执行时,先把变量从内存读到线程自己的本地内存空间,然后对变量进行操作 对该变量操作完成后,在某个时间再把变量刷新回主内存 锁提供的两种特性: 互斥(mutual exclusion) 和可见性(visibility)…
HashMap、ConcurrentHashMap、HashTable的区别 HashMap vs ConcurrentHashMap 引入ConcurrentHashMap是为了同步集合HashTable之间有更好的选择,HashTable与HashMap,ConcurrentHashMap主要区…
集合容器概述 什么是集合 集合就是一个放数据的容器,准确的说是放数据对象引用的容器 集合类存放的都是对象的引用,而不是对象的本身 集合类型主要有三种: set(集)、list(列表) 和 map(映射) 集合的特点 集合用于存储对象的容器,对象是用来封装数据,对象多了也需要存储集中式管理 和数组对比…
Bean的作用域 一般情况下,我们书写在IOC容器中的配置信息,会在我们的IOC容器运行时被创建,这就导致我们通过IOC容器获取到bean对象的时候,往往都是获取到了单例的Bean对象。 这样就意味着无论我们使用多少个 getBean()方法,获取到的同一个 JavaBean 都是同一个对象,这就是…
关于AOP 面向切面编程(Aspect-oriented Programming,俗称AOP)提供了一种面向对象编程(Object-oriented Programming,俗称OOP)的补充,面向对象编程最核心的单元是类(class),然而面向切面编程最核心的单元是切面(Aspects)。与面向对…
IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。 在Java开发中, Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转…
前言: SpringMVC的层:Dao、Service、Controller、View的关系 Dao层: 负责数据持久化,与数据库进行联络的任务都封装在其中,Dao层的数据源以及相关的数据库连接参数都在Spring配置文件中进行配置。Dao接口中的方法都大同小异,因为对数据库的基本操作类似:inse…
TCP 如何保证可靠性 检验和 TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分,但是UDP的检验和字段为可选的,而TCP中是必须有的。计算方法为:在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用…
HTTP1.0 1.0的HTTP版本,是一种无状态,无连接的应用层协议。HTTP1.0 规定浏览器和服务器保持短暂的连接 浏览器每次请求都需要与服务器建立一个TCP连接,服务器处理完成以后立即断开TCP连接(无连接),服务器也不跟踪每个客户端,也不记录过去的请求(无状态) 这种无状态性可以借助coo…
缓存雪崩 什么是缓存雪崩 由于 设置缓存时,key都采用了相同expire 更新策略 数据热点 缓存服务宕机 等原因,可能导致缓存数据同一时刻大规模不可用,或者都更新 解决方案 更新策略在时间上做到比较均匀 使用的热数据尽量分散到不同的机器上 多台机器做主从复制或者多副本,实现高可用 实现熔断限流机…
应用层 HTTP头部包含那些信息 HTTP头部本质上是一个传递额外重要信息的键值对。主要分为: 通用头部、请求头部、响应头部、实体头部 通用头部 协议头 说明 举例 Cache-Control 用来指定当前的请求/回复中是否使用缓存机制 Cache-Control:no-store Connecti…
传输层 三次握手 三次握手是TCP连接的建立过程。在握手之前,主动打开连接的客户端结束CLOSE阶段,被动打开的服务器也结束CLOSE阶段,并进入LISTEN阶段。随后进入三次握手阶段: 首先客户端向服务器发送一个SYN包,并等待服务器确认,其中: 标志位为SYN,表示请求建立连接。 序号为Seq…
OSI七层模型 OSI模型全称为 ,是国际标准化(ISO)提出的一个视图使各种计算机在世界范围内互连为网络的标准框架。OSI将计算机网络体系结构划分为七层,每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通…
垃圾回收器 GC分类与性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商,不用版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将GC分为不同的类型。 Java不同版本新特性 语法层面:Lambda表…
垃圾回收概述 概念 内存的分配与回收 什么是垃圾 在提到什么是垃圾之前,我们先看下面一张图 从上图可以看到,Java和C++的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集 垃圾收集 不是Java的伴生物,早在1960年,第一门开始使用内存动态分配和垃圾收集的L…
StringTable String的基本特性 String:字符串,使用一对””引起来表示 String s1 = “mogublog”; // 字面量的定义方式 创建一个对象 或者不创建对象 String s2 = new String(“moxi”); //创建一个或者两个对象 s2 为新创建…
执行引擎 执行引擎概述 执行引擎属于JVM的下层,里面包括 执行引擎是Java虚拟核心的组成部分之一。”虚拟机”是一个相对于”物理机”的概念,这两种都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条…
直接内存Direct Memory 不是虚拟机运行数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域 直接内存是在Java堆外的,直接想系统申请的内存区间 ,是一种同步非阻塞的I/O模型,也是I/O多路复用的基础 来源于NIO,通过存在堆中的 操作 通常,访问直接内存的速度优于Java堆内…
对象实例化内存布局与访问定位 对象实例化 面试题 对象在JVM是怎样存储的? 对象头信息里面有哪些东西? Java对象头有什么? 从对象创建的方式 和 步骤开始说 对象创建方式 new : 最常见的方式、单例类中调用getInstance的静态方法,xxxFactory的静态方法 Class的new…
方法区 前言 从线程共享与否的角度来看 如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理 栈、堆、方法区的交互关系 下面就涉及了对象的访问定位 Person: 存放在元空间,也可以说方法区 person: 存放在Java栈的局部变量表中 new Person(): 存放…
堆 堆的核心概念 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间的大小也就确定了,是JVM管理的最大一块内存空间。 堆内存…
本地方法接口 什么是本地方法 简单的讲,一个 是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法,该方法的实现由非Java语言实现,比如C。这个特征并非Java所持有,很多其他的编程语言,都有这一机制,比如C++中,你可以用extern “c “告知编译器去…
虚拟机栈 虚拟机栈概述 由于跨平台的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 有不少Java开发人员一提到Java内存结构,就会非常粗粒度的将JVM中的内存区理解…
程序计数器 介绍 JVM中的 中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有吧数据装在寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC寄存器(或指令寄存器)会更加贴切(也称为程序钩子),并且不容易引起一些不必要的误会。JVM中的PC寄存…
运行时数据区概述及线程 前言 本节主要讲的是运行时数据区,也就是下图这部分,他是类加载完成后的阶段 当我们通过前面的:类的 加载- 验证- 准备- 解析- 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区。 也就是大厨做饭,我们把大厨后面的东西(切…
类加载子系统 概述 完整图如下 如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢? 类加载器 执行引擎 类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。 ClassLoader只负责class文件的加载,至于他是否可以运…
CAS 什么是CAS 指比较并交换。CAS算法CAS(V,E, N)包含3个参数,V表示要更新的变量,E表示预期的值,N表示新值。在且仅在V值等于 E值时,才会将V值设为 N,如果 V值和 E值不同,则说明已经有其他线程做了更新,当前线程什么都不做。最后,CAS返回当前V的真实值。 CAS的特性:乐…
线程上下文切换 CPU利用时间片轮询来为每个任务都服务一定的时间,然后把当前任务的状态保存下来,继续服务下一个任务。任务的状态保存及再加载交做线程的上下文切换。 进程: 指一个运行中的程序的示例。在一个进程内部可以有多个线程在同时运行,并与创建它的进程共享同一个地址空间(一段内存区域)和其他资源。…
Java中的锁 java中的锁主要用于保障多并发线程情况下数据的一致性,在多线程编程中为了保障数据的一致性,我们通常需要在使用对象或者方法之前加锁,这是如果有其他线程也需要使用该对象或者该方法,则首先要获得锁,如果某个线程发现锁正在被其他线程使用就会进入阻塞队列,等待锁的释放,知道其他线程执行完成并…
线程的生命周期 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过 新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态 。尤其是当线程启动以后,它不可能一直”霸占”着CPU独自运…
常用的线程池 Java定义了Executor接口并在该接口中定义了 用于执行一个线程任务,然后通过 实现 接口并指向具体线程操作。 接口有多个实现类可用于创建不同的线程池。 名称 说明 可缓存的线程池 固定大小的线程池 可做任务调度的线程池 单个线程的线程池 足够大小的线程池,JDK1.8新增 ne…
线程池的工作原理 Java线程池主要用于主要用于管理线程组及其运行状态,以便java虚拟机更好地利用CPU资源。Java线程池的工作原理为:JVM先根据用户的参数创建一定数量的可运行的线程任务,并将其放入队列中,在线程创建这些任务,如果正在运行的线程数量,超过了最大线程数量(用户设置的线程池大小),…
Java多线程编程 java给多线程编程提供了内置的支持。一个线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程 ,每条线程并行执行不同的任务。 一个进程包括由操作系统分配的内存空间,包括一个或多个线程。一个线程不能独立的存在,他必须是进程的一部分。一个进程一直运行,直到所有的非收回线…
Java集合[1]–java集合分类 之前大概分为三种, , , 三种,JDK5之后,增加 .主要由 和 两个接口衍生出来,同时 接口继承 接口,所以我们也可以说java里面的集合类主要是由 和 两个接口以及他们的子接口或者其实现类组成。我们可以认为 接口定义了单列集合的规范,每次只能存储一个元素,…
常用的远程连接Linux工具 常用的远程连接Linux工具有:Vscode、XShell、FinallShell等。下面重点介绍该三种工具: 1 VsCode的Remote插件 Vscode是一款开源的跨平台编辑器。默认情况下,vscode使用的语言为英文(us) 1.1 下载安装 官方下载地址:…
排序算法概述 定义 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。 分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序: 通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 线性时间非比较类排序: 不通过比较来决定…
进程与线程 进程 程序与进程 进程是计算机中处于运行中程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序(指令和数据)的真正运行实例。 进程结构一般由3部分组成: 代码段、数据段和堆栈段 。代码段用于存放程序代码数据,数个进程可以共享同一个代码段。数据段存放程序的全局变量、常量和静态…
Action Recognition(行为识别) 也可以叫 Action Classification 任务目的 给一个视频片段进行分类,类别通常是各类人的动作 任务特点 简化了问题,一般使用的数据库都先将动作分割好了,一个视频片断中包含一段明确的动作,时间较短(几秒钟)且有唯一确定的label。所…
操作系统 操作系统举例 操作系统的层次结构 操作系统的概念 是系统最基本最核心的软件,属于系统软件 控制和管理整个计算机的硬件和软件资源 合理的组织、调度计算机的工作与资源分配 为用户和其他软件提供方便的接口和环境 操作系统的功能和目标 计算机系统资源的管理者 处理机管理(进程管理) 存储器管理(内…
概述 ElasticSearch ,简称为es,是一个开源的、高拓展的分布式全文检索引擎,它可以近乎实时的存储、检索数据。本身拓展性很好,可以拓展到上百台服务器,处理PB级别的数据。ElasticSearch使用java开发并且使用Lucene作为其核心来实现所有索引和搜索的功能,但是他的目的是通过…
100的阶乘的0? 有趣的疑问 超出数据类型取值范围 会输出什么数字: 数据类型:int 取值范围:-2^31–2^31-1 测试1: 为了更详细的看出其变化,将在临界值前后输出更多值,测试2: 分析:当前int型数据达到最大值2147483647时,是第一位为0,其余31位为全1,01111111…
概述 在 Java 中,JVM 可以理解的代码就叫做 (即扩展名为 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种…
本文导火索 当需要排查各种内存溢出问题、当垃圾收集成为系统达到更高并发的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。 JVM内存分配与回收 Java的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java自动内存管理最核心的功能是堆内存中对象的分配与回收。 Java堆…
进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。…
概述 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过,也正是因为Java程序员把控制内存的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,…
JVM与Java体系结构 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM! 想解决线上JVM GC问题,但却无从下手。 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了 每次面试之前都要重新背一遍JVM的一…
数据结构简介 数据结构是为实现对计算机数据有效使用的各种数据组织形式,服务于各类计算机操作。不同的数据结构具有各自对应的适用场景,旨在降低各种算法计算的时间与空间复杂度,达到最佳的任务执行效率。 如下图所示,常见的数据结构可分为「线性数据结构」与「非线性数据结构」,具体为:「数组」、「链表」、「栈」…
深度优先遍历(Depth First Search, 简称DFS)与广度优先遍历(Breath First Search,简称BFS)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫)、搜索引擎、爬虫等。 DFS (Deep First Search) DFS:从当前节点开始,先标记…
二叉树节点结构 前序遍历 前序遍历:根结点 — 左子树 — 右子树 (根节点在 前中后 那个位置 就叫什么遍历) 前序遍历:1 2 4 6 7 8 3 5 题目 144.二叉树的前序遍历 递归算法 迭代法 中序遍历 中序遍历:左子树— 根结点 — 右子树 (根节点在 前中后 那个位置 就叫什么遍历)…
6. HTTP首部 6.1 HTTP报文首部 上图是HTTP 请求报文 的结构 HTTP请求报文由方法、URI、HTTP版本、HTTP首部字段等组成。 请求报文首部信息实例: HTTP响应报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段三部分组成。 下面是HTTP 响应报文 结构: 响…
1.了解Web及网络基础 1.1 Web基于HTTP通信 Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议,“超文本转义协议”)的协议作为规范,完成从客户端到服务端等一系列运作流程。而协议是规则的约定。可以说,Web是建立在HTTP协议上通信的。…
天下熙熙,皆为利来;天下攘攘,皆为利往。 周书曰:「农不出则乏其食,工不出则乏其事,商不出则三宝绝,虞不出则财匮少。」财匮少而山泽不辟矣。此四者,民所衣食之原也。原大则饶,原小则鲜。上则富国,下则富家。贫富之道,莫之夺予,而巧者有馀,拙者不足。故太公望封於营丘,地潟卤,人民寡,於是太公劝其女功,极技…
没有找到匹配的文章,换个关键词试试。