java基础复习(第八日)

java基础复习(八)

面试题:健某科技

两年至三年的经验

8-12 专科行业默认比本科默认低2-3

1.说说String?

  • 引用类型

常用方法

  • 长度:length
  • 指定:charAt(int index);//传递一个下标参数,返回字符串对应位置的字符
  • 指定某个字符返回第一个位置:indexOf()

2.StringBuffer和StringBuilder的区别(String的操作类)

StringBuffer和StringBuilder都是用于处理字符串的类,都可以进行动态的字符串操作。

StringBuffer是线程安全的,适用于多线程环境;StringBuilder则不是线程安全的,适用于单线程环境或者确定不会被多个线程同时访问的场景

性能是StringBuilder比StringBuffer好,没有Synchronized修饰

3.说说java数组?

当时我是有点傻眼的,我是知道数组 我不知道问的是 数组的含义 还是像arrayList 动态数组

数组 分静态数组、动态数组,如下面静态:

数组其实就是一个存储数据长度固定的容器,它可以保证多个数据的数据类型要一致。有三种的定义方式:

int[] arr = new int[6];这是定义存储6个整数的数据容器。

int[] arr = new int[]{1,2,3,4,5};这是定义存储1-5整数的数组容器。

int[] arr = {1,2,3,4,5};定义了1-5的整数的数组容器,开实际中较为常用的一种方式。

动态如:

ArrayList

ArrayList<String> strings = new ArrayList<>();

遍历方法:

迭代器或for

import java.util.ArrayList;
import java.util.Iterator;//删除指定的元素
ArrayList<Integer> strings = new ArrayList<>();Iterator<Integer> it = strings.iterator();while (it.hasNext()){Integer next = it.next();if(next == 100){it.remove();}}

4.线程的了解

  • 线程的生命周期:新建、可运行、阻塞、等待、计时等待、被终止

    • 1、NEW(新建):线程刚被创建,但是未被启动;
    • 2、RUNNABLE(可运行):线程已经调用start()等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行;
    • 3、BLOCKED(阻塞):在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态;
    • 4、WAITING(等待):正在等待另一个线程执行特定的动作的线程处于这个状态。
    • 5、TIMED_WAITING(计时等待):正在等待另一个线程执行动作达到指定等待时间的线程处于这个状态
    • 6、TERMINATED(被终止):已退出的线程处于此状态。
  • 线程的创建方法

    • 继承Thread类
    • 实现Runnable接口
    • 实现Callable接口
    • 两个区别:Callable能返回结果有异常抛出,结和Futrue能拿到返回值
    • 线程池
      • 任务拒绝策略四种
      • ThreadPoolExecutor.AbortPolicy() //默认策略:丢弃任务并抛出RejectedExecutionException异常
      • ThreadPoolExecutor.DiscardPolicy() //丢弃任务,但是不抛出异常 这是不推荐的做法
      • ThreadPoolExecutor.DiscardOldestPolicy() //抛弃队列中等待最久的任务 然后把当前任务加入队列中
      • ThreadPoolExecutor.CallerRunsPolicy() //调用任务的run()方法绕过线程池直接执行
//核心3 最大10线程等200秒,等待100,饱和直接调用线程
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 10,
200, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), new ThreadPoolExecutor.CallerRunsPolicy());

5.mysql 计划分析(EXPLAIN)

explain SQL语句

索引优化:关注 possable_key、key、key_len字段,确保使用合适的索引,并且索引长度足够短

表关联优化:关注 type 字段,避免全表扫描 ALL,考虑添加索引或优化

子查询优化:关注select_type 字段,避免使用子查询导致全表扫描 ALL,使用join 操作替代

分区表优化:关注 partitions 字段, 尽量查询必要的分区,避免全表描述

SQL语句优化: 关注 row 和 filtered 字段 尽量减少扫描的行和过滤的行数,可以通过优化查询条件。推荐合适的索引d等方式实现

6.redis 三大场景

redis文章第三章

  • 缓存穿透(key对应的数据,缓存和数据源不存在)
    • 1.对空值缓存
    • 2.设置可访问的名单(白名单)
    • 3.采用布隆过滤器
    • 4.进行实时监控(黑名单)
    • 5.接口层增加校验
    • SpringCache 解决方案
      • 空结果也缓存,默认不配置condition或者unless就 ⾏
cache:#使⽤的缓存类型type: redis#过时时间redis:time-to-live: 3600000# 开启前缀,默以为trueuse-key-prefix: true# 键的前缀,默认就是缓存名cacheNameskey-prefix: XD_CACHE# 是否缓存空结果,防⽌缓存穿透,默以为truecache-null-values: true
  • 缓存击穿(缓存过期,大并发请求瞬间击垮DB)
    • 1.预热(设置热门数据,延长时间,如不过期)
    • 2.实时调整(监控热门时间,延长时间)
    • 3.定时任务定时更新缓存
    • 3.使用互斥锁
    • SpringCache 解决方案
      • 缓存的同步Sync
      • sync 可以指示底层将缓存锁住,使只有⼀个线程可以 进⼊计算,⽽其他线程堵塞,直到返回结果更新到缓存 中
@Cacheable(value = {"product"},keyGenerator = "springCacheDefaultKeyGenerator",cacheManager = "cacheManager1Minute",sync = true)
  • 缓存雪崩(大批key 缓存失效,大并发请求瞬间击垮DB)

    • 1.构建多级架构:nginx 缓存 + redis 缓存 + 其他缓存(ehcache等)
    • 2.使用锁或队列
    • 3.设置过期标志更新缓存
    • 4.缓存失效时间分散(随机值)
    • 5.热点数据不过期
    • 6.定时任务定时更新缓存
    • SpringCache解决方案
      • 设置差别的过时时间
      • ⽐如CacheManager配置多个过期时间维度
      • 配置⽂件 time-to-live 配置
cache:#使⽤的缓存类型type: redis#过时时间redis:time-to-live: 3600000# 开启前缀,默以为trueuse-key-prefix: true# 键的前缀,默认就是缓存名cacheNameskey-prefix: XD_CACHE# 是否缓存空结果,防⽌缓存穿透,默以为truecache-null-values: true

JVM 底层面试题

7.解析 Java 堆空间及GC?

当通过 Java 命令启动 Java 进程的时候,会为它分配内存。

内存的一部分用于创建堆空间,当程序中创建的对象时候,就从对空间中分配内存。

GC 是 JVM 内部的一个进程,回收无效对象的内存用于将来的分配

8. 你能保证 GC 执行吗?

不能,可以调用 System.gc() 或者 Runtime.gc(),没办法保证 GC的执行

9.Java 中堆和栈有什么区别?

JVM 中堆和栈属于不同的内存区域,使用目的也不同。栈常用于保存方法帧和局部变量,而对象总是在堆上分配。栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享

10. 常用的JVM调优命令

  • jps:该命令查询当前系统中正在运行的java进程,可以获取进程的PID(进程ID)

  • jstat:监视JVM统计信息命令。获取到堆、垃圾回收、类加载器、编译等相关的数据

  • jcmd:命令行工具,用于执行各种JVM相关的操作,如生成线程转储快照。执行GC、执行JIT编译等

  • jinfo该命令用于获取正在运行的Java进程的系统属性和JVM参数。通过jinfo命令,我们可以查看和修改JVM的运行参数,如堆内存大小、垃圾回收器等

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.4TCP半连接队列和全连接队列

目录 什么是 TCP 半连接队列和全连接队列&#xff1f; TCP 全连接队列溢出 如何知道应用程序的 TCP 全连接队列大小&#xff1f; 如何模拟 TCP 全连接队列溢出的场景&#xff1f; 全连接队列溢出会发生什么 ? 如何增大全连接队列呢 ? TCP 半连接队列溢出 如何查看 TC…

三维模拟推演电子沙盘虚拟数字沙盘开发教程第13课

三维模拟推演电子沙盘虚拟数字沙盘开发教程第13课 该数据库中只提供 成都市火车南站附近的数据请注意&#xff0c;104.0648,30.61658 在SDK中为了方便三方数据的接入&#xff0c;引入了一个用户层接口。主要是完成三方数据的接入&#xff0c;含动态数据&#xff08;如GPS&…

【趣味随笔】怎么维护自己的电脑?

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

MVC OR DDD

MVC OR DDD 说明&#xff1a;这篇是标题党&#xff0c;不包含相关概念说明 前段时间跟随师兄学习了解了DDD领域驱动模型&#xff0c;觉得这个思想更好&#xff0c;进行下面解析和学习方面的思考和实践&#xff0c;觉得很好&#xff0c;耐心读下去。希望对您有所帮助。 首先&am…

【Python】Python爬虫:网络数据的提取利器

随着互联网的快速发展&#xff0c;网络数据已经成为了一项重要的资源。如何从海量的网络数据中提取出我们需要的信息&#xff0c;就成为了各个行业都需要解决的问题。而Python爬虫&#xff0c;就是解决这个问题的利器。 首先&#xff0c;让我们了解一下什么是Python爬虫。Pyth…

curl 使用发送POST GET请求 HEADER设置

curl 使用发送POST GET请求 HEADER设置 文章目录 Get请求POST请求1. application/x-www-form-urlencoded2. Multipart/form-data3. application/json4. text/xml 文件内容作为提交的数据 curl 设置自定义HEADER 头注意事项&#xff1a;shell批处理外传 Get请求 get请求偏简单&…

Spring MVC 三 :基于注解配置

Servlet3.0 Servlet3.0是基于注解配置的理论基础。 Servlet3.0引入了基于注解配置Servlet的规范&#xff0c;提出了可拔插的ServletContext初始化方式&#xff0c;引入了一个叫ServletContainerInitializer的接口。 An instance of the ServletContainerInitializer is looke…

web层Controller通用处理(表格数据处理、分页数据、sql操作、客户端servlet、字符串工具类)

BaseController&#xff08;一&#xff09; public class BaseController{// slf4j-api-1.7.30.jarprotected final Logger logger LoggerFactory.getLogger(BaseController.class);/**将前端传递过来的日期格式字符串&#xff0c;转换为Date类型spring-web-5.3.1.jar*/InitB…

浅析阿里云灵积(平台)模型服务

简介&#xff1a; DashScope灵积模型服务以模型为中心&#xff0c;致力于面向AI应用开发者提供品类丰富、数量众多的模型选择&#xff0c;并为其提供开箱即用、能力卓越、成本经济的模型服务API。DashScope灵积模型服务依托达摩院等机构的优质模型&#xff0c;在阿里云基础设施…

软考高级系统架构设计师系列论文七十三:论中间件在SIM卡应用开发中的作用

软考高级系统架构设计师系列论文七十三:论中间件在SIM卡应用开发中的作用 一、中间件相关知识点二、摘要三、正文四、总结一、中间件相关知识点 软考高级系统架构设计师:构件与中间件技术二、摘要 我曾于近期参与过一个基于SIM卡应用的开发项目,并在项目中担任系统分析的工作…

Linux性能计数器

目录 一、简介二、sys_perf_event_open1、参数 struct perf_event_attr2、参数 pid3、参数 cpu4、参数 group_fd5、参数 flags6、记录信息的环形缓冲区 三、计数器(组)的启用或禁用四、示例代码 一、简介 性能计数器是在大多数现代cpu上可用的特殊硬件寄存器。这些寄存器统计特…

rke安装k8s

1、修改集群中各物理机主机名hostname文件 # 查看 cat /etc/hostname # 命令修改 hostnamectl set-hostname k8s-master2、实现主机名与ip地址解析 # 查看cat /etc/hosts # 修改 vi /etc/hosts3、配置ip_forward过滤机制 # 修改 vi /etc/sysctl.conf net.ipv4.ip_forward1…

CGY-OS 正式开源!【软件编写篇】

上一篇文章&#xff1a;CGY-OS 正式开源&#xff01;_cgy091107的博客-CSDN博客 一、软件编写基础要求 在编写CGY-OS的应用程序之前&#xff0c;您需要&#xff1a; 1. 安装python3.10&#xff0c;配置好CGY-OS。 2.掌握python3的基本语法、lambda表达式、各种简单的数据结构。…

【Python】PySpark

前言 Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎。 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群&#xff0c;计算TB、PB乃至EB级别的海量数据…

LabVIEW是如何控制硬件的?

概述 工程 师 和 科学 家 可以 使用 LabVIEW 与 数千 种 不同 的 硬件 设备 无缝 集成&#xff0c; 并 通过 方便 的 功能 和 跨 所有 硬件 的 一致 编 程 框架 帮助 节省 开发 时间。 内容 通过更简单的系统集成节省开发时间 连接到任何硬件 NI 硬件 第三方硬件 快速找到…

ubuntu18.04复现yolo v8之最终章,realsenseD435i+yolo v8完美运行

背景&#xff1a;上一篇博客我们已经为复现yolov8配置好了环境&#xff0c;如果前面的工作顺利进行&#xff0c;我们已经完成了90%&#xff08;学习类程序最难的是环境配置&#xff09;。 接下来将正式下载yolov8的相关代码&#xff0c;以及进行realsenseD435i相机yolo v8的de…

【学习FreeRTOS】第16章——FreeRTOS事件标志组

1.事件标志组简介 事件标志位&#xff1a;用一个位&#xff0c;来表示事件是否发生 事件标志组是一组事件标志位的集合&#xff0c; 可以简单的理解事件标志组&#xff0c;就是一个整数。 事件标志组的特点&#xff1a; 它的每一个位表示一个事件&#xff08;高8位不算&…

C++学习笔记总结练习:数组离散化的方法

数组离散化 1 问题描述 离散化一个序列的前提是我们只关心这个序列里面元素的相对大小&#xff0c;而不关心绝对大小&#xff08;即只关心元素在序列中的排名&#xff09;&#xff1b;离散化的目的是让原来分布零散的值聚集到一起&#xff0c;减少空间浪费。那么如何获得元素…

linux入门详解

文章目录 一、引言1.1 开发环境1.2 生产环境1.3 测试环境1.4 操作系统的选择 二、Linux介绍2.1 Linux介绍2.2 Linux的版本2.3 Linux和Windows区别 三、Linux安装3.1 安装VMware3.2 安装Xterm3.3 在VMware中安装Linux3.3.1 选择安装方式3.3.2 指定镜像方式3.3.3 选择操作系统类型…

qt创建临时文件

1、临时文件系统 在 Linux 系统中&#xff0c;创建临时文件系统很简单&#xff0c;执行如下指令即可&#xff1a; mount -t tmpfs -o size1024m tmpfs /mnt/tmp 挂载成功后&#xff0c;在 /mnt/tmp 这个挂载点下创建的所有文件都将会是临时文件, 也就是说&#xff1a;当电脑关…