java基础复习(第五日)

这篇具有很好参考价值的文章主要介绍了java基础复习(第五日)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java基础复习(五)

1.如何在Map中遍历删除指定的 key? 如何在List 中遍历删除指定的元素?

两个方法都使用iterator解决

过程:

获取 map/list的iterator

whlie(iterator.hasNext){

//获取下一个元素

entry = iterator.next();

if(entry.getKey == 指定的值)

​ iterator.remove()

}

并发注意加锁

2.请构造一个线程池。要求并发数量控制在3-10,排队长度控制在100,当队列满的时候,直接在调用线程上执行任务。
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 10,
      200, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), new ThreadPoolExecutor.CallerRunsPolicy());
3.请描述实现定时任务的常用方式,以及差异和注意事项。

1.线程等待实现,缺点:实现功能有限,需要手动实现

2.JDK自带的Timer实现,缺点:基于绝对时间,不是相对时间,不会捕获异常

3.JDK自带ScheduledExecutorservice,缺点:只有执行时调度才是一个真正的线程,其余时间都是轮询任务的状态

4.Quartz框架结合Spring实现

5.Spring Task 由@Scheduled指定执行 可以使用fixedDelay和fixedRate,缺点:不支持持久化,

6.Quartz 分布式 异步策略保证唯一性 缺点:只解决高可用问题,处理瓶颈在数据库,没有执行层面的任务分片,无法zzuzui最大化效率

7.经常用轻量级神器XXL-Job,特点:平台化、易部署、开发迅速、学习简单、轻量级、易扩展

8.Elastic-job、Saturn基于Elastic-job(唯品会)

4.有哪些可能导致内存泄露的场景? 写一段有内存泄露的代码

1.不关闭资源引发内存泄露,如数据库连接、网络连接、IO连接、使用忘了关闭,GC无法回收

静态集合、饿汉单例、不合理的设置变量作用域都会使对象生命周期变长,从而导致内存泄漏
非静态内部对象有隐式指向外部对象的指针、使用集合不删除元素等都会隐式导致内存泄漏
忘记关闭资源导致内存泄漏(try-with-resource自动关闭解决)
使用散列表时,充当Key 对象的哈希值被改变导致内存泄漏(key 使用逻辑不可变对象,关键域不能被修改)
缓存引发内存泄漏(使用弱引用解决)

static List list = new ArrayList<>();
  @Test
  public  void Test() {
    Object object = new Object();
    list.add(object);
  }
5.如何理解 Http keep-alive的存在,如何针对性优化?

客户端与服务端的约定,是否关闭TCP连接。

复用减少创建/关闭d多个TCP连接的开销(响应时间、cpu资源等)

优化:

控制持久的生存时间和最大服务请求数

6.如何找出应用中开销最大的查询?(数据库)

方法1:

如果配置慢SQL参数,在/etc/my.cnf

文件位置

默认会保存在mysql的data文件夹下,文件名为host_name-slow.log即 主机名-slow.log

这时你可以去查看日志,记录了查询慢的sql语句,分析优化进行。

方法2:

使用 top 查看进程

top -H -p <mysqld进程>

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23974 mysql 20 0 1658m 358m 12m R 99.9 1.1 0:05.52 mysqld
12295 mysql 20 0 1658m 358m 12m S 0.3 1.1 0:02.44 mysqld
12283 mysql 20 0 1658m 358m 12m S 0.0 1.1 0:01.60 mysqld
12284 mysql 20 0 1658m 358m 12m S 0.0 1.1 0:00.00 mysqld
12285 mysql 20 0 1658m 358m 12m S 0.0 1.1 0:02.63 mysqld
12286 mysql 20 0 1658m 358m 12m S 0.0 1.1 0:02.24 mysqld
12287 mysql 20 0 1658m 358m 12m S 0.0 1.1 0:01.68 mysqld
12288 mysql 20 0 1658m 358m 12m S 0.0 1.1 0:01.77 mysqld
12289 mysql 20 0 1658m 358m 12m S 0.0 1.1 0:01.64 mysqld
12290 mysql 20 0 1658m 358m 12m S 0.0 1.1 0:01.80 mysqld
12291 mysql 20 0 1658m 358m 12m S 0.0 1.1 0:02.37 mysqld

方法3:

查询低效率sql:show processlist

然后 根据 explain 分析执行计划

7.什么情况出现数据库死锁?那些操作可能会导致锁表?

1.两个sql都有锁的情况,互相访问对方的加锁数据会产生死锁

锁表情况:

1.多个数据库连接,同时对一个表的数据进行更新操作,持续一段时间后将出现数据表被锁的现象

解决办法:相关字段加索引

2.并发情况下:

索引字段且值不是唯一

更新操作如果一个id 有多个值相同的记录,会锁表

解决办法:索引唯一则是行锁,反之锁表

3.同一个表,有两个索引 A,B字段

delete from table where A=1 and b=2

delete from table where A=1

也会锁表,解决方法:删除条件尽量统一

8.你使用过 mysql 哪些比较复杂的 SOL,或者高级法? 请列出

order by 、group by、limit、通配符、子查询、正则表达式、

运算符如算术、比较、逻辑

聚合函数如sum等、字符串函数length、trim等

日期函数如day、week、dayofweek等

连表如 inner join 、left join等

视图如创建视图、更新视图等

9.在 SpringBoot项目启动的时仅执行特定代码有几种方法? 请详述

1.实现applicationListener容器刷新成功,应用程序可以达到 监听容器初始化完成事件

2.实现ServletContextAware接口重写setServletContext方法

3.实现ServletContextListener接口重写contextlnitialized方法

4.@PostConstruct注解 前提这些操作不依懒其它Bean的初始化

5.实现ApplicationRunner接口重写runf方法

6.实现CommandLineRunner接口重写run方法

applicationRunner比CommandLineRunner先执行

等方法

控制bean初始化顺序

7.实现ordered接口

8.使用@order注解

10.如何理解最终一致性(Eventual Consistency)? 你一般如何实现

指系统中的所有数据副本经过一段时间后,最终能够达到一致的状态

基如消息队列的解决方案

如使用RabbitMQ实现分布式事务的最终一致性。

如 电商系统

用户下单和支付不是同时进行的,使用MQ的延迟队列,设置30分钟支付过期时间,将该队列绑定到一个延迟交换机上

下单后先锁库存,如果没有支付、延迟队列没有被消费者消费,会被投递到绑定的死信交换机,并路由到死信队列。死信队列可以记录日志,发送告警等操作

支付成功代表消费者消费了订单信息,但处理失败,我们可以将消息重新发送到一个专门用于重试的队列,设置最大重试次数3次,重试间隔为5分钟。在重试队列中,消费者会尝试处理消息,并进行3次的重试,如果还是无法处理成功,则消息会被投递到绑定的死信交换机,并路由到死信队列文章来源地址https://www.toymoban.com/news/detail-629243.html

到了这里,关于java基础复习(第五日)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java安全 URLDNS链分析,网络安全开发面试基础

    this代表的是当前对象的指针,也可以用 this.name 的方式调用当前对象中的成员 那我们去 URLStreamHandler类 当中,查看下 hashCode方法 的代码 protected int hashCode(URL u) { int h = 0; // Generate the protocol part. String protocol = u.getProtocol(); if (protocol != null) h += protocol.hashCode(); // Generate the host pa

    2024年04月23日
    浏览(37)
  • Java面试复习网站和仓库——自用

    疯狂创客圈 JavaTutorial github JavaHome github learning-note github architect-awesome github advanced-java github technology-talk github Java-Interview-Adcanced gitee JavaGuide gitee

    2024年02月13日
    浏览(37)
  • java基础复习(第八日)

    面试题:健某科技 两年至三年的经验 8-12 专科行业默认比本科默认低2-3 1.说说String? 引用类型 常用方法 长度:length 指定:charAt(int index);//传递一个下标参数,返回字符串对应位置的字符 指定某个字符返回第一个位置:indexOf() 2.StringBuffer和StringBuilder的区别(String的操作类)

    2024年02月11日
    浏览(48)
  • 复习java基础

    结构化程式设计(英语:Structured programming)是1960年代开始发展起来的一种编程典范。它采用子程序、程式码区块、for循环以及while循环等结构来取代传统的goto。 自顶向下、逐步求精、模块化 流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用

    2024年02月16日
    浏览(34)
  • java基础复习(第七日)

    1.MQ如何避免消息重复投递或重复消费? 在消息生产时,MQ 内部针对每条生产者发送到消息生成一个 inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进入队列; 在消息消费时,要求消息体中必须要有一个 bizId(对于同一业务全局唯一,如支付ID、订单

    2024年02月11日
    浏览(41)
  • java基础复习(第六日)

    1.是否了解类似 RabbitMQ.kalka 之类的队列服务? 请简述队列取务中的常见要素和使用场景? 了解,队列服务是一种应用间的通信方式,可以实现异步处理、应用解耦、流量削峰和消息通信等功能 队列服务的常见要素:生产者、消费者、消息处理中心和队列 生产者负责发送消息

    2024年02月14日
    浏览(38)
  • Java ---基础知识& 期末复习

    1.Java是低级语言还是 高级语言    答:高级语言。 2.Java是面向对象的程序设计语言吗 答:是。 3. Java是编译型的计算机语言还是解释型的计算机语言。 答: 一种说法:Java是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就无法执行。 另一种说法:Java是解释型

    2024年01月16日
    浏览(62)
  • Java基础复习笔记详细版

    语言 = 语法 + 逻辑 硬件:CPU、内存、硬盘、输入设备、输出设备、调制解调器 软件 软件:即一系列按照 特定顺序组织 的计算机 数据 和 指令 的集合。 有 系统软件 和 应用软件 之分。 系统软件:windows、mac os、android、ios、linux 应用软件:qq、微信、音乐播放器等 图形化界

    2024年02月10日
    浏览(31)
  • Java基础之复习笔记(上)

    目录 一、Java是什么?  💖Java概念  💖Java运行机制 二、Java的语言基础 💖 💖基本数据类型  💖运算符 三、Java逻辑控制 💖分支结构 💖循环结构 四、Java的方法 💖方法的定义 💖方法的重载 💖方法的递归  五.Java数组 💖一维数组 💖二维数组 六.类与对象 💖 基

    2024年02月16日
    浏览(45)
  • Java基础点复习-----LinkedList

    1.你需要通过循环迭代来访问列表中的某些元素。 需要频繁的在 列表开头、中间、末尾 等位置进行 添加和删除 元素操作。 LinkedList 继承了 AbstractSequentialList 类。 LinkedList 实现了 Queue 接口,可作为队列使用。 LinkedList 实现了 List 接口,可进行列表的相关操作。 LinkedList 实现

    2024年01月17日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包