JVM学习笔记
内存结构 1.程序计数器作用:记录下一条指令的执行地址 特点: 线程私有 不会内存泄漏 2.Java虚拟机栈(存局部变量,方法参数)1.定义: 每个线程运行时需要的内存,称为虚拟机栈 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存(参数、局部变量、返回地址) 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。 2.问题辨析:1.垃圾回收是否涉及栈内存? 不会,也不需要。 2.栈内存分配越大越好吗? -Xss1024k 不一定,栈内存越大,线程数就越小。 3.方法内的局部变量是否线程安全? 需要判断变量是不是共享变量,私有变量是线程安全的。共享变量需要考虑线程安全问题。 局部变量是否逃离了方法的作用范围,通过返回值返回了引用地址,可能会被其他线程访问,也需要注意线程安全问题。 3.栈内存溢出 栈帧过多(如递归过深) 栈帧过大() 4.线程运行诊断1.线程占用cpu过高 定位 用top命令定位哪个进程对cpu的占用过高 ps H -eo pid,tid,%cpu | grep...
Java 并发编程(一)线程基础:创建、生命周期与常用方法
摘要:本文是 Java 并发编程系列的第一篇,覆盖**模块 1(基础层)**的全部内容——三种线程创建方式及其底层原理、线程六种生命周期状态与完整转换图、Thread 核心方法(sleep/wait/yield/join/interrupt/守护线程)的深度解析。每个知识点均配有可运行代码、原理拆解与面试速记,文末附总结。 目录 一、三种方式创建线程 1.1 继承 Thread 类 1.2 实现 Runnable 接口 1.3 实现 Callable 接口(带返回值) 1.4 三种方式的底层关系与选择指南 二、线程生命周期与状态(核心) 2.1 六种状态一览 2.2 状态转换全景图 2.3 每种状态的触发条件与代码演示 2.4 面试高频:BLOCKED vs WAITING vs TIMED_WAITING 三、核心方法深度解析 3.1 currentThread() 与线程基本信息 3.2 run() 与 start() 的本质区别 3.3 sleep() —— 抱着锁睡 3.4 wait() ——...
Java 并发编程(九)ThreadLocal 体系:隔离原理、跨线程传递与内存泄漏
摘要:ThreadLocal 是 Java 多线程面试的高频考点。本文从「线程隔离」的设计理念出发,深入剖析 ThreadLocalMap 数据结构、源码级 set/get/remove、线性探测解决哈希冲突,重点讲清弱引用 key 与强引用 value 的内存模型与设计动机、数据存储位置、一个线程存多个值的姿势、完整生命周期,以及内存泄漏的根因与最佳实践;并延伸至 InheritableThreadLocal 与 TransmittableThreadLocal 的跨线程传递,结尾以总结收束。每个章节均穿插面试口述与记忆钩子。 目录 一、作用与定位 二、线程隔离演示 三、注意事项 四、实现原理:数据结构 五、核心操作源码解析(set / get /...
Linux常用命令
此文章记录Linux常用命令,方便日后查阅使用。 命令格式 文件和目录操作 1.查看当前路径 2.列出目录内容 3.切换目录 4.创建目录 5.删除文件或目录 6.新建文件或更新文件时间戳:touch 7.移动文件:mv[原文件位置] [新文件位置] 8.复制文件 9.查看文件内容 11.打印字符串到屏幕 13.查询历史命令 系统监控相关命令 Shell相关命令1.Shell的基本概念 shell是一种广泛使用的交互式脚本语言,通常用于Unix类系统(如Linux、macOS等)运行用户在交互式环境下执行命令。 它有两种主要的客户端: Bash:现代、增强版的Shell,支持脚本编写。本文记录Bash下的命令 Sh:经典版本的Shell,功能相对基础。 用命令echo -$SHELL查询当前所用的Shell客户端,在大多数Linux发行版中,使用的都是Bash。 创建.sh后缀名的文件(例如叫demo.sh),然后用命令bash...
消息队列学习记录
RabbitMQ如何保证消息的可靠性?从3个层面上考虑,包括生产端,Broker端,消费端。 生产端 使用消息确认机制ack 生产者端在发生消息后可以注册一个回调函数,用于监听消息是否成功送达Broker。 如果消息成功写入队列,RabbMQ会返回一个ack; 如果失败(如队列不存在、交换机不可达),会返回nack。 Broker端 1.持久化 对象 属性 说明 Queue durable=true 队列在服务器重启后仍存在 Exchange durable=true 交换机持久化 Message deliveryMode=2 消息持久化(1=非持久化,2=持久化) 注意:即使设置了持久化,也只能防止 服务器宕机 的消息丢失,不能防止 未被消费就删除...
八股_java集合
...
八股_java基础
概念1.说说java的特点面向对象 平台无关性:一次编译到处运行 内存管理:自动管理内存和回收不再使用的对象 2.java的优势和劣势是什么?优势: 跨平台,一次编译到处运行 生态丰富,有各种框架和类库 内存管理,垃圾自动回收 严格的面向对象,复用性和可维护性优秀 天然支持多线程,方便并发编程 安全性方面:java有安全模型,比如支持沙箱机制,适合网络编程 稳定性方面:企业级应用长期使用,版本更新比较注重向后兼容 劣势 内存占用大,jvm本身也占用内存 性能开销较c++,Rust大 执行效率较慢,比如微服务启动时间比go慢 语法繁琐,开发效率比较低 3.Java为什么是跨平台的?因为java运行在jvm上,jvm会将编译后的class文件根据平台的不同翻译成不同平台对应操作系统的机器码。 因此不同平台需要安装各自版本的jvm才能运行java程序。 4.JVM,JDK,JRE三者的关系jdk包括jre,jre包括jvm。 5.为什么java解释和编译都有?Java 同时采用 解释执行 和 编译执行(JIT 编译)的结合方式,主要是为了在 启动速度 和...
苍穹外卖复盘(待完善)
JWT简介JWT,全称json web tokens, 用于对应用程序上的用户进行身份认证。 JWT的结构JWT由三部分组成,用 . 分隔。像这样 Header.Payload.Signature Header:是一个json对象,标识这个令牌(token)的类型(type)和签名的算法,算法默认是HMAC SHA256(写成HS256),例如: 1234{ "typ":"JWT", "alg":"HS256"} 最后,将上面的 JSON 对象使用 Base64URL 算法(详见后文)转成字符串。 Payload:也是一个json对象,用于存放实际需要传递的数据。JWT提供了7个官方字段供选用。 iss(issuer):签发人 exp(expiration time):过期时间 sub(subject):主题 aud(audience):受众 nbf(Not Before) : 生效时间 iat(Issued At) : 签发时间 jti(JWT ID) :...
设计模式
面向对象设计原则 单一职责原则(SRP)一个类应该仅有一个引起它变化的原因。(职责划分明确,避免类承担过多功能导致高耦合) 开闭原则(OCP)软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。(通过抽象和多态实现功能扩展,而非直接修改原有代码) 里氏替换原则(LSP)所有引用基类的地方必须能透明地使用其子类的对象。(子类必须能够完全替代父类,不破坏原有功能逻辑) 依赖倒转原则(DIP)高层模块不应该依赖低层模块,两者都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。(通过接口 / 抽象类解耦实现类,降低模块间直接依赖) 接口隔离原则(ISP)客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。(细化接口设计,避免胖接口导致的强制实现冗余方法) 合成复用原则(CRP)尽量使用对象组合 /...
苍穹外卖
微信登录功能实现采用HTTPS 调用1GET https://api.weixin.qq.com/sns/jscode2session 请求参数 属性 类型 必填 说明 appid string 是 小程序 appId secret string 是 小程序 appSecret js_code string 是 登录时获取的 code,可通过wx.login获取 grant_type string 是 授权类型,此处只需填写 authorization_code 返回参数 属性 类型 说明 session_key string 会话密钥 unionid string 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回,详见 UnionID...




