阿里笔试题(2015)持续更新中

article/2025/9/30 2:07:54

第一次做阿里笔试题,除了ACM题之外从来没有做过校招网络题呀,完全是裸考,总体感觉吧,对于我来说,感觉时间不够用,不是题不会,感觉时间紧,大脑很混乱,总结这一次的笔试题

废话不多说,直接上题和答案


平均每个人逗留时间为20分钟,那么开场前20分钟一共来了400人,且有20个人逗留时间已经到,应该容纳400人


双向循环列表,从任何一个元素开始可以遍历全部元素

先和后面的元素相连

s->next=p->next;

p->next->prev=s;

在前面的元素相连

p->next=s;

s->pre=p;

答案显而易见 第二项


画图可以实现


时间轮转为1秒

A 24

B 20

C 7

D14

总时间为73所以平均周转时间为73/4=18.25


有4种坐的方式

在不考虑四个小孩的顺序只考虑这四个小孩坐哪四个位置的时候, 四个小孩坐一起的时候有8个方向,2个面对面的时候只有4个。

结果为480


动态分配都在堆中,毋容置疑



Yield()暂时交出cpu控制权,从running状态转为runnalbe状态,但是仍有可能被调度,sleep()线程指定休眠一段时间wait()在其他线程调用此对象的notify()notifyAll()方法时才能继续执行线程中sleep()方法和yeild()方法的主要区别

: 1.sleep()

方法会给其他线程运行的机会,而不管其他线程的优先级,因此会给较低优先级的线程运行的机会;yeild()方法只会给优先级相同的或者比自己高的线程运行的机会2.sleep()方法声明抛出InterruptionException异常,而yeild()方法没有声明抛出任何异常3.sleep()方法比yeild()方法具有更高的可移植性4.sleep()方法使线程进入阻塞状态yeild()方法使线程进入就绪状态当前运行的线程可以调用另一个线程的join()方法,当前运行的线程将转到阻塞状态直到另一个线程运行结束,它才会恢复运行  join()有两种形式:public void join()和public void join(long timeout)可以设置阻塞的时间

sleep()方法进入阻塞状态,当有两个线程(线程1和线程2),线程1的优先级比线程2的优先级高,线程1sleep()则线程2可以获得运行机会

当有比当前线程优先级高的线程出现时,高优先级会抢占CPU并运行,yield()方法,暂停一段时间,且这段时间不确定,它会使与当前线程相同优先级的线程获得运行机会

具有相同优先级的多个线程调度不一定是分时的,多核CPU可能同时调度



首先选择排序、插入排序、冒泡排序时间复杂度为 O(n^2)

快速排序最坏排序为时间复杂度O(n^2)

堆排序需要知道是大顶堆或者小顶堆,因为不了解数列特征所以不推荐其复杂度为O(nlgn);

所以快排是最优的


TCP/IP建立在三次握手协议基础上


前提条件是,虚拟机发生故障当且仅当它的宿主发生故障

根据条件得出虚拟机发生故障则物理机发生故障,则这台物理机所虚拟出的虚拟机会发生故障,所以虚拟机发生的故障不是彼此独立的,单台虚拟机的故障率和单台物理机的故障率是相同的,如果组成集群,那么当某个虚拟机发生故障时,另一个虚拟机会代替发生故障的虚拟机运行,所以可靠性比5台物理机的可靠性相同,所以无法判断这一百台虚拟机和100台物理机哪个更可靠

附加题1

sleep()和wait()的区别

sleep()是让进程休眠一段时间,sleep()休眠持有锁,不释放系统资源,时间过后自动醒来进入可运行状态,但不一定执行,取决于虚拟机的调度,sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再notify()也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。

使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用 
   synchronized(x){ 
      x.notify() 
     //或者wait() 
   }



附加题2

大意,插入一个二叉树,求二叉树最大节点和最小节点的绝对值

java 代码如下

//树节点

public class TreeNode1 {
private TreeNode1 leftChild;
private TreeNode1 rightChild;
int intege;

public TreeNode1 getLeftChild() {
return leftChild;
}
public void setLeftChild(TreeNode1 leftChild) {
this.leftChild = leftChild;
}
public TreeNode1 getRightChild() {
return rightChild;
}
public void setRightChild(TreeNode1 rightChild) {
this.rightChild = rightChild;
}
public int getIntege() {
return intege;
}
public void setIntege(int intege) {
this.intege = intege;
}
public TreeNode1(int intege) {
super();
this.intege = intege;
}




}


二叉树

public class Btree1 {


private int max;
private int min;


public Btree1(int max, int min) {
super();
this.max = max;
this.min = min;
}

//构造二叉树
public void insert(TreeNode1 root, int i) {
if (root == null) {
System.out.println("树为空");
} else {


if (root.getIntege() < i) {
if (root.getLeftChild() != null) {
insert(root.getLeftChild(), i);
} else {
root.setLeftChild(new TreeNode1(i));
}
} else {
if (root.getRightChild() != null) {
insert(root.getRightChild(), i);
} else {
root.setRightChild(new TreeNode1(i));
}
}
}
}

插入二叉树,遍历找到节点最大值和最小值
public void FindMax_Min(TreeNode1 root) {
if (root == null) {
System.out.println("该树为空");
} else {
if(root.getIntege()>max)
{
max=root.getIntege();
}
if(root.getIntege()<min)
{
min=root.getIntege();
}
//System.out.println(root.getIntege() + "  ");
if (root.getLeftChild() != null) {
FindMax_Min(root.getLeftChild());
}
if (root.getRightChild() != null) {
FindMax_Min(root.getRightChild());
}
}
}
public void Max_Min_abs()
{
System.out.println(max-min);
}
public static void main(String[] args) {
int a[]={1,45,6,7,12,89,2,17};
Btree1 b=new Btree1(-10000,10000);
TreeNode1 treeNode1=new TreeNode1(a[0]);
for(int i=1;i<a.length;i++)
{
b.insert(treeNode1, a[i]);
}
b.FindMax_Min(treeNode1);
b.Max_Min_abs();
}
}

附加题3

求两个字符串最大的连续出现的公共部分 列如query为acbac,text为acaccbabb那么公共子串为cba 长度为3

下面为java代码编写

import java.util.Scanner;


public class FindMaxSubString {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("请输入query");
/*String str1 = "acbac";
String str2 = "acaccbabb";
*/
String str1=s.nextLine();
System.out.println("请输入text");
String str2=s.nextLine();
String result = getMaxString(str1, str2);
if(result!=null)
{
System.out.println(result.length());
}
else
{
System.out.println("没有公共子串");
}
}


private static String getMaxString(String str1, String str2) {
String max = null;
String min = null;
max = (str1.length() > str2.length() ? str1 : str2);
min = max.equals(str1) ? str2 : str1;
for (int i = 0; i < min.length(); i++) {
for (int start = 0, end = min.length() - i; end != min.length() + 1; start++, end++) {
String sub = min.substring(start, end);
if (max.contains(sub))
return sub;
}
}
return null;
}
}

本人做的,可能有不对的,希望大家提出啊,持续更新中



http://chatgpt.dhexx.cn/article/xe31JL8d.shtml

相关文章

阿里linux运维笔试,2020阿里巴巴笔试真题(含答案)

1.假设可以不考虑计算机运行资源(如内存)的限制,以下 python3 代码的预期运行结果是:() import math def sieve(size): sieve= [True] * size sieve[0] = False sieve[1] = False for i in range(2, int(math.sqrt(size)) + 1): k= i * 2 while k < size: sieve[k] = Fals…

2021年阿里笔试题分享——大数相加(附源码)

2021年阿里笔试题分享&#xff08;一&#xff09; 原题描述审题做题过程还原思路 原题描述 废话不多说&#xff0c;这道题题目描述如下 /*** Alipay.com Inc.* Copyright (c) 2004-2021 All Rights Reserved.*///对单链表表示的大数进行求和&#xff1a;1->2->34->5…

阿里笔试题

1 小刘家里有n个鸟蛋&#xff0c;大小为a_i&#xff0c;并且大小互不相同&#xff0c;他有n个孵蛋器&#xff0c;第i个孵蛋器每天可以长大i。那么最早几天会有同样大小的蛋出现&#xff0c;规则&#xff1a;最大的鸟蛋放最慢的&#xff0c;最小的放最快的&#xff0c;其它依类…

大数据阿里面试笔试题总结,我的结果 当然是凉凉

我 秀儿 在学习大数据一年后去了阿里面试,这是我笔试的时候题目,虽然我凉了,但是希望大家加油 总结给大家看看 参考下面的M R系统的场景:HDFS 块大小为64MB;输入类型为FileInputFormat;有三个文件大小分别是: 0.在Hadoop中定义的主要公用InputFormat中,默认是哪一个…

阿里20道经典测试题,一个月吐血整理,你会几题?背下来,帮你成功就业(有答案版)

一、怎样把自动化测试在公司中实施并推广起来&#xff1f; 1、项目组调研选择自动化工具并开会演示demo案例&#xff0c;我们主要是演示selenium和robotframework两种。 2、搭建自动化测试框架&#xff0c;在项目中逐步开展自动化。 3、把该项目的自动化流程、框架固化成文档…

数据结构(使用头插法实现单链表)

一.定义 1.线性表的链式存储就是单链表&#xff0c;单链表通过一组任意的存储单元来存储线性表的数据元素&#xff08;逻辑相邻&#xff0c;存储离散&#xff09;&#xff0c;单链表对于每一个链表结点&#xff0c;不但存储自身数据&#xff0c;还开辟了存储一个指向后继结点的…

【Java】JDK 7 HashMap 头插法在并发情况下的成环问题

CONTENT 问题描述成因详解总结Reference 问题描述 JDK 7 的 HashMap 解决冲突用的是拉链法&#xff0c;在拉链的时候用的是头插&#xff0c;每次在链表的头部插入新元素。resize() 的时候用的依然是头插&#xff0c;头插的话&#xff0c;如果某个下标中的链表在新的 table 中依…

java 如何实现单链表中的头插法

文章目录 头插法1 思路2 插入过程2.1 定义node节点2.2 将node插入到原来head前面的位置2.3 将node节点与下一个结点链接起来2.4 更改head的指向 3 注意点4 为空的情况5 代码实现 头插法 1 思路 先定义一个新的节点&#xff0c;命名为node。将node插入到原来单链表头节点的前面…

头插法建立链表详解

头插法就是建立一个头节点&#xff0c;进行初始化定义&#xff0c;next存储下一个节点位置的地址&#xff0c;初始化定义指针域为空&#xff0c;表示该头部节点后面指向任何位置的地址&#xff0c;开始时只有一个头部节点。 head -> next NULL; 图形化表示为 申请一个新节…

头插法创建单链表

1.对单链表的解释 链表与顺序表不同&#xff0c;它是一种动态管理的存储结构&#xff0c;链表中的每个结点占用的存储空间不是预先分配的&#xff0c;而是运行时系统根据需求生成的&#xff0c;因此建立单列表要从空表开始&#xff0c;每读入一个数据元素则申请一个结点&#…

头插法逆置单向链表c语言,单链表的逆置(头插法和就地逆置)

今天课间的时候偶然看到了一个面试题&#xff1a;单链表的逆置&#xff0c;看了题解感觉乖乖的&#xff0c;貌似和以前看的版本不搭&#xff0c;于是重新进行了一番探究 单链表的逆置分为两种方法&#xff1a;头插法和就地逆置法&#xff0c;这两种方法虽然都能够达到逆置的效果…

头插法和尾插法

链表的头插法和尾插法 表结构的声明 typedef int ElemType; typedef struct node //定义链表的结点的结构 {ElemType data;//定义链表的数据域struct node *next;//定义链表中的指针域 }slink;头插法 1&#xff0c;从一个空表开始&#xff0c;重复读入数据&#xff0c;生成新…

单链表之头插法

1、前言&#xff1a; 什么是头插法&#xff1f;说白了头插法就是新增节的点总是插在头节点后面&#xff0c;然后大家可能会有疑惑&#xff0c;什么是新增节点&#xff0c;什么是头节点呢&#xff0c;下面请听俺娓娓道来。。。 2、预前准备&#xff1a; 头节点&#xff1a;一…

单链表的头插法和尾插法的示例

单链表是数据结构中最基本的数据结构&#xff0c;单链表有头插法和尾插法&#xff0c;今天有空把这两者做成一个实验示例以作比较。 提示&#xff1a;编译代码是否通过可能与编译器的版本有关&#xff0c;本程序是在 Android 操作系统下的 Compiler C语言编译器下编译通过。 一…

头插法实现单链表逆置

在头结点的后面依次插入后面的结点&#xff0c;q从第二个结点向后移动遍历&#xff0c;p永远在第一个结点完成头插法逆置单链表。 void reverseL(Linklist &L){//头插法逆转单链表if(L!NULL){LNode* pL->next;//p等于第一个结点LNode* qp->next;//q等于第二个结点p-…

HashMap/ConcurrentHashMap/头插法/尾插法

1.1 HashMap JDK1.7 JDK1.8 存储 数组链表 数组链表红黑树 位置算法 h & (length-1) h & (length-1) 链表超过8 链表 红黑对(链表超过8且数组长度超64) 节点结构 Entry<K,V> implements Map.Entry<K,V> Node<K,V> implements Map.Entry…

C语言 链表 头插法

代码&#xff08;VS2017中运行&#xff09; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct student {int num;float score;struct student *pnext;//*pnext存的是下一个节点的首地址 }stu,*pst…

头插法建立单链表

头插法建立单链表图示过程&#xff08;其中an表示时间上第n个建立的节点&#xff0c;L为头指针&#xff0c;箭头表指向&#xff0c;sn代表an的地址&#xff09; 结构体代码与主函数如下&#xff1a; struct Link //创建一个结构体类型 {int data; //数据域struct Link* p; /…

Java实现头插法

实现原理&#xff1a; 这是第一个头结点&#xff0c;现在要插入一个节点&#xff0c;也就是让新节点指向该头结点&#xff0c;任何让head指向新节点&#xff0c;新节点变为头结点。 代码实现&#xff1a; 实体类&#xff1a; public class entity {private String data;privat…

单链表的头插法

链表与顺序表不同链表是用一组任意的储存单元来存放线性表的结点&#xff0c;这组结点可以是连续的&#xff0c;也可以是非连续的&#xff0c;甚至可以是零散分布在内存的任何位置&#xff0c;为了能正确的去表达结点的逻辑关系&#xff0c;必须在储存元素值的同时&#xff0c;…