当前位置: 首页 > news >正文

Java,八股,cv,算法——双非研0四修之路day22

目录

 昨日总结

今日计划

算法——有效的括号

算法——删除字符串中所有相邻重复项

Jvm笔记

昨日八股答案 

今日八股


 昨日总结

  • JVM课程学习,完成点评实战篇
  • cv(停滞中)
  • 背诵小林coding--Java并发面试篇(5/6)
  • 代码随想录——有效的括号,删除字符串中所有相邻重复项

今日计划

  • redis高级篇(分布式缓存),JVM课程学习
  • cv(停滞中)
  • 背诵小林coding--Java并发面试篇(6/6)
  • 代码随想录——逆波兰表达式,滑动窗口最大值

算法——有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

class Solution {//本题也可以拿map集合来做,将对应括号分别设置为key和value,通过遍历字符串和栈定元素进行判断//创建一个栈public boolean isValid(String s) {int len = s.length();  if(len % 2 != 0) {return false;}Deque<Character> stack = new LinkedList<Character>();for(char index : s.toCharArray()) {if(index == '(' || index == '[' || index == '{') {stack.push(index);}else{//栈为空,无法匹配右括号if (stack.isEmpty()) return false; char top = stack.pop();//注意出栈的括号方向的左右问题if(index == ')' && top != '(' || index == ']' && top != '[' || index == '}' && top != '{')return false;}}return stack.isEmpty();}
}

算法——删除字符串中所有相邻重复项

给出由小写字母组成的字符串 s重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 s 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:

输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
class Solution {public String removeDuplicates(String s) {Deque<Character> stack = new LinkedList<Character>();for(char index : s.toCharArray()) {if(stack.isEmpty() || !stack.isEmpty() && stack.peek() != index)stack.push(index);else{stack.pop();}}StringBuilder str = new  StringBuilder();while(!stack.isEmpty()) {str.append(stack.pop());}return str.reverse().toString();}
}

Jvm笔记

  • 类加载器是将字节码文件加载到JVM中,并对这些字节码进行连接和初始化操作。
  • 加载器的种类有大概三四个。主要的是启动类加载器(顶层加载器),扩展类加载器,自定义类加载器,应用类加载器。
  • Java中的加载器采用了双亲委派模式,就是底层的加载器不会自己去主动加载请求,而是把这个请求委派给父类加载器,指到传送到顶层的启动类加载器。如果它反馈无法加载,就会让子加载器去加载。大白话来说就是,儿子要干什么情况要问父母。如果父母不管,在传父母的父母,直到始祖,如果他也不管,就在返回传给他的一代又一代的人。
  • 双亲委派的优势:避免类的重复加载,保护程序安全,防止核心API被篡改
  • CalssLoader类,他是一个抽象类,所有的类加载器都继承自classLoader(不包含启动类加载器)

昨日八股答案 

  • Threadlocal作用,原理,具体里面存的key value是啥,会有什么问题,如何解决?

        是用于解决线程安全问题的一种机制。通过每个线程内部变量具体独立性,从而避免了资源共享和同步带来的冲突问题。

        ThreadLocal中内部维护了Entry数组。每个Entry代表着一个对象,key就是ThreadLocal本身,value是实例化的对象。当你创建一个ThreadLocal变量时,它实际上就是一个ThreadLocal对象的实例。每个ThreadLocal对象都可以存储任意类型的值,这个值对每个线程来说是独立的。

        但他也存在一些问题。例如当一个线程结束时,其ThreadLocalMap也会销毁。但是ThreadLocal本身如果有引用指向它,则不会被立马销毁。这时候可以回发生内存泄漏问题,

        因此,实际应用中需要在使用完ThreadLocal变量后调用remove()方法释放资源。

  • Java中想实现一个乐观锁,都有哪些方式?

        CAS操作,是乐观锁的基础。

        利用时间戳作为比较的依据

  • CAS 有什么缺点?为什么不能所有的锁都是用CAS?

        存在ABA问题,当发生两次修改后变回原来的值时,CAS会判定他未发生任何动作

        可能存在长时间的循环判断。因为CAS的基于循环判断的,如果CAS操作一直未能成功,线程会一直自旋重试,占用CPU资源。在高并发情况下,会到导致CPU资源的浪费

今日八股

  • Voliatle关键字的作用,可以保证线程安全吗
  • Voliatle与Synchronized的比较
  • 介绍一下线程池工作的原理及其用法

http://www.lryc.cn/news/606842.html

相关文章:

  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘altair’问题
  • 【Leetcode hot 100】1.两数之和
  • 切比雪夫不等式
  • qcustomplot 大量数据拖拽卡顿,开启opengl
  • SketchUp扩展工具分享:Ropefall v1.02插件轻松实现绳索模拟
  • 1、【C语言】【进阶】数组,指针与退化
  • 函数fdopendir的用法
  • [vue3 echarts] echarts 动态数据更新 setInterval
  • 深度学习(鱼书)day08--误差反向传播(后三节)
  • 轻钢屋顶电动排烟窗(工业用)
  • ansible.cfg 配置文件的常见配置项及其说明
  • SQL中的HAVING用法
  • MySQL--组从复制的详解及功能演练
  • 从O(n²)到O(n log n):深度剖析快速排序的内存优化与cache-friendly实现
  • 高级11-Java日志管理:使用Log4j与SLF4J
  • Oracle EBS 缺少adcfgclone.pl文件
  • 电商前端Nginx访问日志收集分析实战
  • 汇川ITS7100E触摸屏交互界面开发(一)调试事项说明
  • 25电赛e题杂乱环境稳定识别矩形框(附源码)
  • Vue3 Vue3中的响应式原理
  • StarRocks vs. Trino
  • 九联UNT403HS_海思MV320处理器_安卓9-优盘强刷刷机包
  • 嵌入式 Linux 深度解析:架构、原理与工程实践(增强版)
  • 企业级LLM智能引擎 的完整解决方案,整合了 SpringAI框架、RAG技术、模型控制平台(MCP)和实时搜索,提供从架构设计到代码实现的全面指南:
  • cloudflare worker + Cloudflare AI Gateway
  • 如何在不依赖 Office 的情况下转换 PDF 为可编辑文档
  • python中appium
  • K8S周期性备份etcd数据实战案例
  • 精通分类:解析Scikit-learn中的KNN、朴素贝叶斯与决策树(含随机森林)
  • 应用药品注册证识别技术,为医药行业的合规、高效与创新发展提供核心驱动力