Java初级开发0608面试

Wesley13
• 阅读 656

聊聊SpringBoot和传统的SSM的区别?

  • SpringBoot是Spring的扩展,在Spring的基础上,简化了传统的SSM开发繁琐的配置;
  • 在部署上,SpringBoot内置了Tomcat,可以直接将项目打包成可执行的jar/war。

说说你了解的Docker?

Docker是一个容器,就像是集装箱,将软件系统运行所需的环境如jdk、MySQL、消息队列等等装起来,这样就像是搬运货物一样,软件开发所需的环境就能在不同的硬件环境,如开发的电脑、测试集群、生产环境之间迁移,再也不用担心测试与正式发布时环境及依赖关系的差异所带来的问题。

生产环境Docker一般怎么用?单体吗?

一般使用k8s搭建集群。

说说你现在做的项目的业务?

略……

说说你们项目中MySQL、MongoDB、Redis的应用场景?

  • MySQL用于存储业务数据;
  • MongoDB用于存储文件;
  • Redis作为缓存。

详细说说在你的项目中Redis的应用场景?

  • 用作缓存
  • 与前置/中间库库数据交换时临时存储数据

你们的Redis存储的时候对象序列化吗?

需要序列化。

你们的数据是以什么形式存进Redis的?

将数据存进Redis使用了Spring Data Redis的RedisTemplate。序列化器采用的是StringRedisSerializer,所以以字符串的形式存储Java对象

你们公司是怎么做负载均衡的?

采用Nginx进行负载均衡。

聊聊RocketMQ的应用场景?

  • 异步解耦
  • 分布式事务的数据一致性
  • 消息的顺序收发
    详见参考【3】。

为什么短信发送考虑要用RocketMQ?

用户有一个待办任务,需要发送短信提醒。传统的做法有两种 1.串行的方式;2.并行方式。

(1)串行方式:将提醒信息写入数据库成功后,再发送提醒短信。
(2)并行方式:将提醒信息写入数据库的同时,发送提醒短信。

并行的方式可以提高处理的时间。

说说Tomcat的作用?为什么要用Tomcat?用户是怎么访问到你的应用的?

通俗点说他是jsp网站的服务器之一,就像asp网站要用到微软的IIS服务器,php网站用apache服务器一样,因为你的jsp动态网站使用脚本语言等写的,需要有服务器来解释你的语言吧,服务器就是这个功能。如果你的网页是纯html的,浏览器就可以直接解释查看效果,但是你的网页一但是.jsp .asp .php 等的动态网页时浏览器自己就无法解释了,需要上面说到的服务器。tomcat便可以解释jsp等java编写的网站。

聊聊多线程?

先说一说进程:进程可以简单的理解为一个可以独立运行的程序单位,它是线程的集合,进程就是有一个或多个线程构成的。而线程是进程中的实际运行单位,是操作系统进行运算调度的最小单位。可理解为线程是进程中的一个最小运行单元。

那么多线程就很容易理解:多线程就是指一个进程中同时有多个线程正在执行。

为什么要在项目中使用多线程?

于我的理解:使用多线程最主要的原因是提高CPU的利用效率。

现在CPU基本都是多核的,如果你只用单线程,那就是只用到了一个核心,其他的核心就相当于空闲在那里了。

厕所的坑位有5个,如果只用一个坑位,那不是很亏?比如现在我有5个人要上厕所。
在单线程的时候:进去一个人解决要10分钟,然后后面的人都得等一个坑位。那总的时间就要花费50分钟。

在多线程的时候,进去一个人要解决10分钟,然后后面的人发现还有别的坑位,就去别的坑位了,不是傻瓜地等一个坑位。

我们可以把「等坑位」看作是IO操作,众所周知IO操作相对于CPU而言是非常慢的,CPU等待IO那段时间是空闲的。如果我们需要做类似IO这种慢的操作,可以开多个线程出来,尽量不要让CPU空闲下来,提高系统的资源利用率。

说白了,我们就是在「压榨」CPU的资源。本来就有的资源,如果有需要,我们就应当好好利用。

说说创建线程的方式?

三种方式:

  • 继承 Thread 类创建线程类

  • 实现Runnable接口创建线程类

  • 使用 Callable 和 Future 创建线程

线程一般通过什么方式管理?

Java提供了线程池可以很好地提高性能, 尤其是当程序中需要创建大量生存期很短暂的线程时, 更应该考虑使用线程池。

与数据库连接池类似的是, 线程池在系统启动时即创建大量空闲的线程, 程序将一个 Runnable 对象或 Callable 对象传给线程池, 线程池就会启动一个空闲的线程来执行它们的 run()或 call()方法, 当 run()或 call()方法执行结束后, 该线程并不会死亡, 而是再次返回线程池中成为空闲状态, 等待执行下一个Runnable 对象的 run()或 call()方法。

从 Java 5 开始, Java 内建支持线程池。 Java 5新增了一个 Executors 工厂类来产生线程池。

使用线程池来执行线程任务的步骤如下:

  • 调用 Executors 类的静态工厂方法创建一个 ExecutorService 对象, 该对象代表一个线程池。

  • 创建 Runnable 实现类或 Callable 实现类的实例, 作为线程执行任务。

  • 调用 ExecutorService 对象的 submit()方法来提交 Runnable 实例或 Callable实例。

  • 当不想提交任何任务时, 调用 ExecutorService 对象的 shutdown()方法来关闭线程池。

    // 创建一个具有固定线程数(6)的线程池 ExecutorService pool = Executors.newFixedThreadPool(6); // 使用Lambda表达式创建Runnable对象 Runnable target = () -> { for (int i = 0; i < 100 ; i++ ) { System.out.println(Thread.currentThread().getName() + "的i值为:" + i); } }; // 向线程池中提交两个线程 pool.submit(target); pool.submit(target); // 关闭线程池 pool.shutdown();

参考:

【1】:《Docker开发指南》
【2】:SpringBoot学习笔记(七、Redis)
【3】:消息队列 RocketMQ 版 > 产品简介 > 适用场景
【4】:MQ的作用总结(应用场景及优势)
【5】:大白话讲一下Tomcat的作用
【6】:进程与线程的一个简单解释
【9】:长篇干货,建议收藏—话说java多线程那些事儿
【10】:清明花了几天总结了多线程的知识点
【11】:Java Review(三十七、多线程)

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这