2024届校招-Java开发笔试题-S4卷
有三种题型:单项选择题(10道)、不定项选择题(10道)、编程题(3道)
下面是一些回忆的题目:
1.哪种设计模式将对象的创建与使用分离,通过工厂类创建对象
答:工厂模式
工厂模式是一种创建型设计模式,它旨在将对象的创建与使用分离。通过引入一个工厂类,客户端代码可以委托工厂类来创建所需的对象,而不必直接实例化对象。这有助于降低耦合度并提高代码的可维护性。
2.运行中的线程,执行Thread.sleep(5000)方法后,,当时间过去5s后,线程状态为
答:可运行(Runnable)状态,等待系统调度来继续执行。
3.new java.math.Big Decimal(0.1)是否会丢失精度
答:不会,BigDecimal类是用来表示精确的任意精度的十进制数,不会引发浮点数的精度问题。然而,如果使用浮点数字面值(例如0.1)来初始化BigDecimal,那么在转换过程可能会引发精度问题,应使用字符串初始化BigDecimal,直接将字符串文本转换为BigDecimal。
4.关于@Import注解的选择题
答:@Import注解是Java Spring 框架中的一个注解,用于在配置类中引入其他配置类,从而将它们的配置合并到当前配置中。它允许开发者在一个配置类中引入其他配置,以便组织和管理Spring应用程序的配置。
@Import注解动态注入方式可通过使用ImportSelector接口的类来实现。但并不是唯一的方式,还可以通过条件化的@Import注解、编程方式的条件化注入、条件化的BeanDefinition注册。
5.创建型设计模式有哪些?
答:创建型设计模式是一种软件设计模式,它们关注如何创建对象,以便在应用程序中更灵活、更高效地管理对象的创建和初始化。以下是一些常见的创建型设计模式:单例模式(Singleton Pattern)、工厂模式(Factory Pattern)、抽象工厂模式(Abstract Factory Pattern)、建造者模式(Builder Pattern)、原型模式(Prototype Pattern)
6.快速排序最坏时间复杂度?
O(n^2),平均时间复杂度为O(n*log(n))
7.匹配“一”“二”“三”……“十”的中文正则表达式是
[一二三四五六七八九十]
8.哪些场景适合使用NIO模型?
Java NIO(New I/O)模型适合处理需要高并发、高吞吐量和低延迟的网络通信和文件I/O场景。以下是一些适合使用NIO模型的常见场景:网络编程、文件I/O、多路复用、实时数据处理、高性能代理和网关
9.哪些集合类是线程安全的?
答:集合类的线程安全意味着多个线程可以同时访问和修改这些集合而不会导致数据不一致或抛出并发异常。以下是一些线程安全的集合类:Vector、HashTable、ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentLinkedQueue、BlockingQueue。
10.哪些属于进程同步机制?
答:线程同步机制是用于协调和管理多个进程之间的执行顺序以及访问共享资源的一组技术。以下是一些常见的进程同步机制:互斥锁(Mutex)、信号量(Semaphore)、条件变量(Condition Variable)、屏障(Barrier)、读写锁(Read-Write Lock)、管程(Monitor)、自旋锁(Spin Lock)、消息传递
-
当浏览器缓存中有缓存版本时,哪个HTTP响应头字段可以用于验证缓存是否仍然有效
答:ETag(实体标签)、Last-Modified(最后修改时间) -
哪些可以增强Cookie的安全性
答:使用HTTPOnly标志;使用Secure标志、设置Cookie的SameSite属性;限制Cookie的有效期;对Cookie的内容进行加密;在服务器端验证Cookie;实施双重身份验证(2FA);定期更改Cookie值;监控和审计;
编程题:
- 有n个城市通过m个航班连接。每个航班都从城市u开始,以价格w抵达v。现在给定所有的城市和航班,以及出发城市src,你的任务是找到从src城市出发到其他所有城市最便宜的机票价格列表。
如果无法从src到达某个城市,则他们的价格-1表示。
输入n=3,edges=[[0,1,100],[1,2,100],[0,2,500],src=0
输出:[0,100,200]
/*** 有n个城市通过m个航班连接。每个航班都从城市u开始,以价格w抵达v。现在给定所有的城市和航班,以及出发城市src,* 你的任务是找到从src城市出发到其他所有城市最便宜的机票价格列表。* 如果无法从src到达某个城市,则他们的价格-1表示。** 输入n=3,edges=[[0,1,100],[1,2,100],[0,2,500],src=0* 输出:[0,100,200]***/import java.util.*;
public class CheapestPrices {public int[] findCheapestPrice(int n, int[][] flights, int src) {//n代表城市个数//flights 是一个包含多个一维数组的二维数组。每个一维数组都表示一条航班的信息,//flights[i][0] 是起始城市的编号,flights[i][1] 是目标城市的编号,flights[i][2] 是航班的价格。//src 代表出发城市,题目的意思就是要找出从src出发到其他所有城市出发最便宜的价格。// 创建一个邻接表来表示城市之间的航班价格List<int[]>[] graph = new List[n];//graph[i] 存储与城市 i 相关的航班信息。for (int i = 0; i < n; i++) {graph[i] = new ArrayList<>();//表示每个索引 i 处的元素都是一个空的整数数组列表。}for (int[] flight : flights) { //这段循环用于将航班信息从二维数组 flights 添加到图数据结构 graph 中int u = flight[0];int v = flight[1];int w = flight[2];graph[u].add(new int[]{v, w});//将一个新的整数数组 {v, w} 添加到列表中}// 初始化距离数组,初始距离为无穷大int[] distances = new int[n];//该数组用来存储从出发城市 src 到其他城市的距离信息Arrays.fill(distances, Integer.MAX_VALUE);distances[src] = 0;//将出发城市 src 到自身的距离设置为0// 使用最小堆来进行Dijkstra算法PriorityQueue<int[]> minHeap = new PriorityQueue<>((a, b) -> a[1] - b[1]);//minHeap用于存储待处理的节点minHeap.offer(new int[]{src, 0});//将出发城市 src 到自身的距离为0的节点添加到优先队列while (!minHeap.isEmpty()) {int[] current = minHeap.poll();//从优先队列 minHeap 中取出队首元素,即距离最短的节点int currentCity = current[0];//current[0] 表示当前节点的城市编号int currentCost = current[1];//current[1] 表示从起始城市到当前城市的距离。//用于检查当前节点的距离是否已经被更新过//如果 currentCost 大于 distances[currentCity],//则表示已经有更短的路径到达当前城市,因此可以忽略当前节点,继续处理下一个节点if (currentCost > distances[currentCity]) {continue;}for (int[] neighbor : graph[currentCity]) {int neighborCity = neighbor[0];//neighbor[0] 表示邻居城市的编号int neighborCost = neighbor[1];//neighbor[1] 表示从当前城市到邻居城市的距离(权重)。int newCost = currentCost + neighborCost;if (newCost < distances[neighborCity]) {distances[neighborCity] = newCost;minHeap.offer(new int[]{neighborCity, newCost});//将该数组添加到优先队列 minHeap 中,以便稍后继续处理该邻居节点。// 这确保了算法在接下来的迭代中考虑到了邻居节点。}}//通过这段循环,算法不断地探索从当前节点到其邻居节点的可能路径,并更新到达邻居节点的最短距离。// 如果找到更短的路径,就会将邻居节点添加到优先队列中,以便后续继续处理。这是Dijkstra算法的关键步骤,// 确保找到从出发城市到其他城市的最短路径。}// 将无法到达的城市的距离设为-1for (int i = 0; i < n; i++) {if (distances[i] == Integer.MAX_VALUE) {distances[i] = -1;}}return distances;}public static void main(String[] args) {CheapestPrices solution = new CheapestPrices();int n = 3;int[][] edges = {{0, 1, 100}, {1, 2, 100}, {0, 2, 500}};int src = 0;int[] output = solution.findCheapestPrice(n, edges, src);// 输出最便宜的机票价格列表for (int price : output) {System.out.print(price + " ");}// 输出: 0 100 200}
}
2.给定一个任意矩阵(用二维数组表示),要求从左上角移动至右下角,每次只能向下或向右移动一格,矩阵中的数字为本次移动的收益,请算出移动值右下角时,所经过路径和的最大收益。
import java.util.*;public class maxPathSum {public static int maxPathSum(int[][] matrix){if(matrix==null||matrix.length==0||matrix[0].length == 0){return 0;}int m = matrix.length;int n = matrix[0].length;int dp[][] = new int[m][n];dp[0][0] = matrix[0][0];for(int j=1;j<n;j++){dp[0][j] = dp[0][j-1]+matrix[0][j];}for(int i=1;i<n;i++){dp[i][0] = dp[i-1][0] + matrix[i][0];}for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1])+matrix[i][j];}}return dp[m-1][n-1];}public static void main(String[] args) {int [][] matrix={{1,2,3},{4,7,6},{5,8,9},};int maxSum = maxPathSum(matrix);System.out.println("最大路径和为:"+maxSum);}
}
3.在一个遥远的银河中,有N个星球(编号从1到N),这些星球之间通过星际门进行连接。每个星际门都连接两个星球,并旦可以双向通行。
每个星际门的开启需要消耗一定的能量,这个能量由星际门上的数字表示。每个星际门上的数字都是唯一的。
现在,由于某种原因,所有的星际门都处于 关闭状态。作为一个探索者,你的任务是找出一种方式,开启最少的星际门,使得所有的星球都至少通过一个开启的星际门与其他星球连接。
给你一些可连接的选项 connections,其中connections[i] = [Xi, Yi, Mi] 表示星球 Xi和星球Yi之间可以开启一个星际门工并消耗 Mi 能量。
计算联通所有星球所需的最小能量消耗。如果无法联通所有星球,则输出-1。
import java.util.*;
import java.util.Arrays;
public class Solution1 {public static int minimumEnergyRequired(int N,int[][] connections){Arrays.sort(connections,(a,b)->a[2]-b[2]);int[] parent = new int[N+1];//parent[i] 存储了元素i的父节点的编号,// 如果 parent[i] 的值为-1,表示元素i是自身所在集合的根节点。Arrays.fill(parent,-1);int minEnergy = 0;int numEdges = 0;for(int[] connection:connections){int front = connection[0];int to = connection[1];int energy = connection[2];int rootFrom = findRoot(parent,front);int rootTo = findRoot(parent, to);if(rootFrom!=rootTo){parent[rootFrom] = rootTo;minEnergy += energy;numEdges++;//已经合并的星际门数量if(numEdges==N-1){return minEnergy;}}}return -1;}//它的作用是查找某个节点在并查集中所属的集合的根节点,并在查找过程中进行路径压缩,private static int findRoot(int[] parent,int node){if(parent[node] == -1){return node;}parent[node] = findRoot(parent,parent[node]);//这一步是路径压缩的关键,它将节点 node 的父节点直接设置为根节点,// 从而优化后续的查找操作。return parent[node];}public static void main(String[] args) {int N=4;int[][] connections = {{1,2,5},{1,3,6},{2,3,1},{3,4,2},{2,4,3},};int result = minimumEnergyRequired(N,connections);System.out.println("最小能量消耗为:"+result);}
}相关文章:
2024届校招-Java开发笔试题-S4卷
有三种题型:单项选择题(10道)、不定项选择题(10道)、编程题(3道) 下面是一些回忆的题目: 1.哪种设计模式将对象的创建与使用分离,通过工厂类创建对象 答:工…...
数据分析面试题(2023.09.08)
数据分析流程 总体分为四层:需求层、数据层、分析层和结论层 一、统计学问题 1、贝叶斯公式复述并解释应用场景 公式:P(A|B) P(B|A)*P(A) / P(B)应用场景:如搜索query纠错,设A为正确的词,B为输入的词,那…...
jenkins 报错fatal:could not read Username for ‘XXX‘:No such device or address
#原因:机器做迁移,或者断电,遇到突发情况 #解决: 一.排查HOME和USER环境变量 可以在项目执行shell脚本的时候echo $HOME和USER 也可以在构建记录位置点击compare environment 对比两次构建的环境变量 二.查看指定节点的git凭证 查…...
LRU算法之我见
文章目录 一、LRU算法是什么?二、使用原理三、代码实现总结 一、LRU算法是什么? LRU算法又称最近最少使用算法,它是是大部分操作系统为最大化页面命中率而广泛采用的一种页面置换算法。是一种缓存淘汰策略,根据使用频率来淘汰无用…...
【第20例】华为 IPD 体系 | IPD 的底层思考逻辑(限制版)
目录 简介 更新情况 IPD体系 CSDN学院 专栏目录 作者简介 简介 最近随着华为 Mate 60 系列的爆火发布。 这家差不多沉寂了 4 年的企业再次映入大众的眼帘。 其实,华为手机业务发展的元年最早可以追溯...
spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题
问题1. spacy Can’t find factory for ‘entityLinker’ 1)问题 写了一个实体链接类,代码如下: nlp spacy.load("en_core_web_md")class entieyLink:def __init__(self, doc, nlp):self.nlp nlpself.doc self.nlp(doc)# Che…...
【数据结构】红黑树的插入与验证
文章目录 一、基本概念1.时代背景2. 基本概念3.基本性质 二、实现原理1. 插入1.1变色1.2旋转变色①左旋②右旋③右左双旋④左右双旋 2.验证 源码总结 一、基本概念 1.时代背景 1972年鲁道夫拜尔(Rudolf Bayer)发明了一种数据结构,这是一种特殊的B树4阶情况。这些树…...
Pycharm----将Anaconda建立的环境导入
首先打开项目设置,点击添加 随后点击现有环境,点击三个。。。号进行添加 最后找到你Anaconda安装文件夹,envs找到你建立的环境名称,找到python.exe将它导入即可让现在的python环境为你建立的环境,同时还需要更改终端方…...
数字花园的指南针:微信小程序排名的提升之道
微信小程序,是一片数字花园,其中各种各样的小程序竞相绽放,散发出各自独特的芬芳。在这个花园中,排名优化就像是精心照料花朵的园丁,让我们一同走进这个数字花园,探寻如何提升微信小程序的排名优化…...
LRU与LFU的c++实现
LRU 是时间维度上最少使用 维持一个链表,最近使用的放在表头 淘汰表尾 LFU 是实际使用频率的最少使用 每一个对应的频率维持一个链表, 淘汰最低频率的最后一个 1. LRU LRU(Least Recently Used,最近最少使用)是一种常…...
什么是Docker和Docker-Compose?
Docker的构成 Docker仓库:https://hub.docker.com Docker自身组件 Docker Client:Docker的客户端 Docker Server:Docker daemon的主要组成部分,接受用户通过Docker Client发出的请求,并按照相应的路由规则实现路由分发…...
三.listview或tableviw显示
一.使用qt creator 转变类型 变形为listview或tableviw 二.导出ui文件为py文件 # from123.py 为导出 py文件 form.ui 为 qt creator创造的 ui 文件 pyuic5 -o x:\xxx\from123.py form.uifrom123.py listview # -*- coding: utf-8 -*-# Form implementation generated fro…...
【算法】一文带你从浅至深入门dp动态规划
文章目录 一、前言二、动态规划理论基础1、基本概念2、动态规划五部曲【✔】3、出错了如何排查? 三、实战演练🗡0x00 斐波那契数0x01 第N个泰波那契数0x02 爬楼梯0x03 三步问题0x04 使用最小花费爬楼梯⭐解法一解法二 0x05 解码方法* 四、总结与提炼 一、…...
超简单免费转换ape到flac
1. 安装最新版的ffmpeg 2. 安装cywin环境 3. 设置path到ffmpeg export PATH$PATH:"PATH/TO/FFMPEG/BIN" 4.到ape所在的目录,执行以下命令 find . -iname "*.ape" | while read line; do fb${line::-4}; fn"$fb.flac";echo ffm…...
JavaScript混淆加密
什么是JS混淆加密? JavaScript混淆加密是一种通过对源代码进行变换,使其变得难以理解和分析的技术。它的目标是增加攻击者破解代码的难度,同时保持代码的功能不受影响。混淆加密的目的是使代码难以逆向工程,从而防止攻击者窃取知…...
Java8特性-Lambda表达式
📕概述 在Java 8中引入了Lambda表达式作为一项重要的语言特性,可以堪称是一种语法糖。Lambda表达式使得以函数式编程的方式解决问题变得更加简洁和便捷。 Lambda表达式的语法如下: (parameters) -> expression (参数) -> {代码}其中&…...
通过Power Platform自定义D365CE业务需求 - 1. Microsoft Power Apps 简介
Microsoft Power Apps是一个趋势性的、无代码和无代码的商业应用程序开发平台,配有一套应用程序、服务和连接器。其数据平台为构建适合任何业务需求的自定义业务应用程序提供了快速开发环境。随着无代码、少代码应用程序开发的引入,任何人都可以快速构建低代码应用程序,并与…...
简易实现QT中的virtualkeyboard及问题总结
文章目录 前言:一、虚拟键盘的实现综合代码 二、为什么选用QWidget而不适用QDialog实现键盘三、从窗体a拉起窗体b后,窗体b闪退问题的探讨四、关闭主窗口时子窗口未关闭的问题 前言: 本文章主要包含四部分: 虚拟键盘的实现&#…...
景联文科技可为多模态语音翻译模型提供数据采集支持
8月22日Facebook的母公司Meta Platforms发布了一种能够翻译和转录数十种语言的人工智能模型——SeamlessM4T,可以在日常生活中或者商务交流中为用户提供更便捷的翻译和转录服务。 相较于传统的文本翻译,这项技术的最大区别在于它可以实现端到端的语音翻译…...
定时器分批请求数据
<!DOCTYPE html> <html><script>//需要分页的数组let arr [1,2,3,4,5,6,7,8,9,10]//分割数组,每页3条splitArr(arr,4)/*** 分割数组*/function splitArr(idList,size){//当前页数let num 1//共多少页let count Math.ceil(idList.length / siz…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目
应用场景: 1、常规某个机器被钓鱼后门攻击后,我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后,我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...
