Java软件开发面试题1(睿联科技)

1.mysql如何存储金额?

用Decimal,这是为专门为财务相关问题设计的数据类型。

语法格式:DECIMAL(最大整数位数M, 最大小数位数D) //其中,D≤M

2.mysql的Date类型介绍一下,并举出使用示例,最后再举出如何配合Java使用。

【概念介绍】MySQL 的 DATE 类型用于存储日期值,格式为 'YYYY-MM-DD'。它只包含年、月、日信息,不包含时间信息

【使用示例】INSERT INTO example_table (event_date) VALUES ('2023-10-23');

【日期函数】CURDATE() 函数获取当前日期。使用示例:INSERT INTO example_table (event_date) VALUES (CURDATE());

【增加函数】DATE_ADD() 函数给日期加上一定的日期。使用示例:UPDATE example_table SET event_date = DATE_ADD(event_date, INTERVAL 5 DAY) WHERE id = 1; //可选项:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR

Tips:如果想处理时间,那么应该使用DATETIME类型:

这种类型用于存储日期和时间信息,格式通常为'YYYY-MM-DD HH:mm:ss'

Tips2:Java中也有Date和DateTime类,从而实现了对于MySQL该种类型的操作

3.linux线程池和进程池工作的区别

线程池(Thread Pool):

线程池是用来管理线程的集合,可以重复使用已创建的线程来执行多个任务。

在Linux中,线程池通常是通过Java中的ExecutorService接口实现的。

线程池适用于处理短时间、轻量级的任务,因为线程的创建和销毁开销较小。

线程池中的线程共享同一个进程的资源,因此需要注意线程之间的同步和资源竞争问题。

进程池(Process Pool):

进程池是用来管理进程的集合,每个进程都有自己独立的内存空间和资源。

在Linux中,进程池通常需要通过操作系统级别的API来实现。

进程池适用于处理长时间、重量级的任务,因为每个进程都有独立的资源空间。

进程之间相互隔离,不会出现线程之间的资源竞争问题,但进程间通信开销较大。

总体而言,线程池适合处理轻量级任务并且能够更高效地利用系统资源,而进程池适合处理重量级任务并且能够提供更好的隔离性。在选择使用哪种池时,需要根据具体任务需求和系统资源情况进行权衡。

4.设计模式 工厂和建造者的区别

工厂方法模式(Factory Method Pattern)用于创建一些简单对象,而且通常只需要一步就可以创建完成。通过定义一个工厂接口和多个实现类,每个工厂实现类负责创建自己所对应的产品类型。

建造者模式(Builder Pattern)则更适用于创建复杂对象,例如需要一步步构建或者配置许多不同的组成部分才能完成的对象。它通过将对象构造和表示分离来实现目标,并提供灵活的方式使得同样的构建过程可以创建不同的表现形式。

例如:当我们要考虑生产一个超人;

  • 若使用工厂方法,模式,一般将生产超人和生产机器人放在一起比较,我们提供生产超人的工厂就可以将超人生产出来了。
  • 若使用建造者模式考虑,就是将超人分成头、手、脚等等部分生产好,然后进行组装好。最后穿上内裤就可以了,在这个过程中就需要一个指挥者了,用于指定生产顺序。

5.抽象类和接口的区别

抽象类

  • 不能被实例化,只能被用作子类的超类。
  • 可以包含抽象和非抽象方法。
  • 子类使用extends关键字来继承抽象类。
  • 可以有构造函数。
  • 类可以继承一个抽象类。

接口

  • 是抽象方法的集合,所有方法都隐含是抽象的。
  • 类实现接口时使用implements关键字。
  • 接口中的成员函数默认是public,不能包含方法体。
  • 类可以实现多个接口,但只能继承一个抽象类。

总体来说,抽象类更适合捕捉通用特性和提供默认实现、对类的抽象

接口更适合定义行为规范和强制实现者遵循规范、对行为的抽象

6.简述一下linux的权限操作

在Linux中,权限操作是通过文件权限来控制对文件和目录的访问权限。每个文件和目录都有一个所有者、一个所属组和其他用户的权限设置。以下是简要的解释:

  • 文件类型:Linux中的文件类型包括普通文件、目录、链接文件、设备文件、数据接口文件等,每种类型有不同的属性标识。
  • 权限属性:文件权限属性包括读(r, 4)、写(w, 2)、执行(x, 1)权限,分别对应于所有者、所属组和其他用户。权限属性可以通过数字表示(如764)或符号表示(如rwxr-xr--)。
  • 系统保护:文件权限提供系统保护,确保非权限用户无法操作具有某些权限的功能和数据,适合团队开发和数据共享。
  • 常用命令:在Linux中,常用命令包括ls查看文件列表,cat查看文本文件内容,chmod修改文件权限,chown修改文件所有者等。

总体而言,Linux的权限操作通过设置不同的读、写、执行权限来控制对文件和目录的访问。这种机制确保了系统安全性,并允许管理员灵活地管理用户对不同资源的访问权限。

7.redis的队列如何实现?存储、获取的命令如何?

可以使用List实现。

LPUSH key val // 将值val插入到列表key的表头

LPOP key // 弹出列表key表头的元素

RPUSH key val // 将值val插入到列表key的表尾

RPOP key // 弹出列表key表尾的元素

8.相比于前端而言,你觉得后端最大的难点在哪儿?

并发请求、性能优化、系统稳定性、技术选型

  • 并发请求处理:处理大量并发请求可能导致系统性能下降,需要采取多线程、缓存、队列等技术来提高系统的并发处理能力。
  • 性能优化:优化系统性能是一个持续的挑战,需要通过GC优化、压测分析、性能监控等手段来提升系统效率。
  • 系统稳定性:保证系统长时间稳定运行是关键,遇到假死情况或异常情况时,需要分析问题根源并采取相应措施解决。
  • 技术选型:选择合适的技术栈和架构设计对项目成功至关重要,需要考虑业务需求、团队实力和未来扩展性等因素。

9.https和http的区别,如何加密的?

HTTP和HTTPS之间的主要区别在于安全性和加密方式:

  • HTTP是超文本传输协议,数据传输是明文的,不加密。它运行在TCP之上,客户端与服务器端无法验证对方的身份,容易被窃听、篡改和伪装请求。
  • HTTPS是在HTTP基础上加入了加密和认证机制的安全HTTP协议。HTTPS使用SSL/TLS协议进行加密传输,通过公钥加密、私钥解密的方式保证通信安全。HTTPS通信需要证书,一般需要向认证机构购买。

SSL/TLS协议通过以下步骤实现安全通信:

  • 握手阶段:在握手阶段,客户端和服务器之间进行身份认证、协商加密算法、交换加密密钥等初始化协商功能。
  • 记录协议层:建立在可靠传输层协议(如TCP)之上,提供数据封装、压缩、加密等基本功能。
  • 握手协议层:用于在实际数据传输开始前,进行身份认证、协商加密算法、交换加密密钥等操作。

10.http如何知道报文片是最后一个的?

在HTTP中,报文片段如何知道是否是最后一个取决于报文头部的Content-Length字段或Transfer-Encoding字段。

  • Content-Length字段:当服务器发送HTTP响应时,如果在响应头部包含了Content-Length字段,它指定了整个消息体的长度。客户端通过检查已接收数据的长度是否等于Content-Length字段的值来确定是否接收到了完整的消息。
  • Transfer-Encoding字段:另一种方式是使用Transfer-Encoding: chunked字段,它表示消息体被分成多个块传输。每个块前面会有一个十六进制数表示块的长度,最后一个块长度为0。当客户端接收到一个长度为0的块时,就知道这是最后一个块,即消息传输完成。

11.腾讯会议是什么连接?mac地址是什么?

  • 腾讯会议使用的是TCP/IP协议进行通信。具体来说,腾讯会议客户端和服务端的通信都使用TCP/IP、HTTP、RTP/RTCP协议
  • MAC地址(Media Access Control Address)是网络设备的物理地址,是一个唯一的标识符,通常由48位二进制数表示。MAC地址用于在局域网中唯一标识网络设备,类似于设备的身份证号码。MAC地址通常以十六进制表示,由6组两位十六进制数(00-FF)组成,中间用冒号或短横线分隔。MAC地址是数据链路层的概念,在网络通信中起着重要作用。

12.linux的系统调用函数有哪些?

  1. open():打开文件或创建文件。
  2. read():从文件描述符中读取数据。
  3. write():向文件描述符中写入数据。
  4. close():关闭文件描述符。
  5. fork():创建子进程。
  6. exec():执行程序。
  7. wait():等待子进程结束。
  8. exit():退出进程。
  9. pipe():创建管道。
  10. socket():创建套接字。

全部评论

相关推荐

2 14 评论
分享
牛客网
牛客企业服务