纯干货分享!阿里java岗笔试面试题总结(附答案)

【绝对干货】java面试笔试题及答案 一面(电话面+后期在线coding) ①你们为什么要使用mongdoDb?你们的这个系统中涉及到哪些表? ②hytrix 的实现原理是什么?隔离策略有哪些?你们使用的是哪一些?你们项目中哪些地方使用到了,使用场景是什么?为什么要使用? ③spirng 源码。 ④rocketMq 的设计理念,数据存储,设计思想等。 ⑤ConcurrentHashMap的底层实现原理 ⑥你线上问题解决经验是什么?遇到了什么问题?应该怎么去解决? ⑦在线编码: 两个有序链表,合并成一个链表,然后进行算法的时间复杂度,空间复杂度分 阅读详情

前言

2022金九银十马上结束,现为大家整理了这次金九银十面试阿里的面试题总结,都是我从朋友那拿到的面试真题,话不多说,满满的干货分享给大家!

int a=10是原子操作吗?

是的。 注意点:

  • i++(或++i)是非原子操作,i++是一个多步操作,而且是可以被中断的。i++可以被分割成3步,第一步读取i的值,第二步计算i+1;第三部将最终值赋值给i。 * int a = b;不是原子操作。从语法的级别来看,这是也是一条语句,是原子的;但是从实际执行的二进制指令来看,由于现代计算机CPU架构体系的限制,数据不可以直接从内存搬运到另外一块内存,必须借助寄存器中断,这条语句一般对应两条计算机指令,即将变量b的值搬运到某个寄存器(如eax)中,再从该寄存器搬运到变量a的内存地址:

mov eax, dword ptr [b]

mov dword ptr [a], eax

既然是两条指令,那么多个线程在执行这两条指令时,某个线程可能会在第一条指令执行完毕后被剥夺CPU时间片,切换到另外一个线程而产生不确定的情况。

innodb支持全文索引吗?

5.6版本之后InnoDB存储引擎开始支持全文索引,5.7版本之后通过使用ngram插件开始支持中文。之前仅支持英文,因为是通过空格作为分词的分隔符,对于中文来说是不合适的。MySQL允许在char、varchar、text类型上建立全文索引。

innodb支持表锁吗?

支持,补充:普通的增删改 是表锁,加入索引的增删改是行锁,执行查询时不加任何锁的。

HTTP短连接怎么变成长连接。

在header中加入 --Connection:keep-alive。

调用yeild()会阻塞吗?

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)。 yield() 方法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。

虚拟机栈是线程共享的吗?

不是。

[图片上传失败...(image-12b0d6-1665715743895)]

JVM初始运行的时候都会分配好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) , VM Stack(虚拟机栈)和Native Method Stack (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为什么我把内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说只发生在Heap上)的原因。

栈区:

  • 每个线程包含一个栈区,栈中只保存基础数据类型的值(比如int i=1中1就是基础类型的对象)和对象的引用以及基础数据的引用

  • 每个栈中的数据(基础数据类型和对象引用)都是私有的,其他栈不能访问。

  • 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

堆区:

  • 存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)

  • jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 。

方法区:

  • 又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

  • 方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。(两者区别为堆区存放new出来的对象信息,方法区存放本身就具有的类信息)

常量存放在JVM的那个区域?

方法区: 又叫静态区,跟堆一样,被所有的线程共享。它用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机 (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。

所有的对象都分配到堆中吗?

答:不一定。

CopyOnWriteArrayList是线程安全的吗?

答:是的。 CopyOnWriteArrayList使用了一种叫写时复制的方法,当有新元素添加到CopyOnWriteArrayList时,先从原有的数组中拷贝一份出来,然后在新的数组做写操作,写完之后,再将原来的数组引用指向到新数组。创建新数组,并往新数组中加入一个新元素,这个时候,array这个引用仍然是指向原数组的。当元素在新数组添加成功后,将array这个引用指向新数组。 CopyOnWriteArrayList的整个add操作都是在锁的保护下进行的。这样做是为了避免在多线程并发add的时候,复制出多个副本出来,把数据搞乱了,导致最终的数组数据不是我们期望的。

    public boolean add(E e) {
        //1、先加锁
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            Object[]elements = getArray();
            int len = elements.length;
            //2、拷贝数组
            Object[]newElements = Arrays.copyOf(elements, len + 1);
            //3、将元素加入到新数组中
            newElements[len] = e;
            //4、将array引用指向到新数组
            setArray(newElements);
            return true;
        } finally {
            //5、解锁
            lock.unlock();
        }
    }

复制代码

由于所有的写操作都是在新数组进行的,这个时候如果有线程并发的写,则通过锁来控制,如果有线程并发的读,则分几种情况:

  • 如果写操作未完成,那么直接读取原数组的数据;

  • 如果写操作完成,但是引用还未指向新数组,那么也是读取原数组数据;

  • 如果写操作完成,并且引用已经指向了新的数组,那么直接从新数组中读取数据。

可见,CopyOnWriteArrayList的读操作是可以不用加锁的。 CopyOnWriteArrayList 有几个缺点: 由于写操作的时候,需要拷贝数组,会消耗内存, 如果原数组的内容比较多的情况下,可能导致young gc或者full gc 不能用于实时读的场景,像拷贝数组、新增元素都需要时间, 所以调用一个set操作后,读取到数据可能还是旧的, 虽然CopyOnWriteArrayList 能做到最终一致性,但是还是没法满足实时性要求; CopyOnWriteArrayList 合适读多写少的场景,不过这类慎用 因为谁也没法保证CopyOnWriteArrayList 到底要放置多少数据, 万一数据稍微有点多,每次add/set都要重新复制数组,这个代价实在太高昂了。 在高性能的互联网应用中,这种操作分分钟引起故障。 CopyOnWriteArrayList透露的思想

  • 读写分离,读和写分开

  • 最终一致性

  • 使用另外开辟空间的思路,来解决并发冲突

数组越界问题

一般来讲我们使用时,会用一个线程向容器中添加元素,一个线程来读取元素,而读取的操作往往更加频繁。写操作加锁保证了线程安全,读写分离保证了读操作的效率,简直完美。 如果这时候有第三个线程进行删除元素操作,读线程去读取容器中最后一个元素,读之前的时候容器大小为i,当去读的时候删除线程突然删除了一个元素,这个时候容器大小变为了i-1,读线程仍然去读取第i个元素,这时候就会发生数组越界。 测试一下,首先向CopyOnWriteArrayList里面塞10000个测试数据,启动两个线程,一个不断的删除元素,一个不断的读取容器中最后一个数据。

publicvoidtest(){
        for(int i = 0; i<10000; i++){
            list.add("string" + i);
        }

        new Thread(new Runnable() {
            @Override
            publicvoidrun() {
                while (true) {
                    if (list.size() > 0) {
                        String content = list.get(list.size() - 1);
                    }else {
                        break;
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            publicvoidrun() {
                while (true) {
                    if(list.size() <= 0){
                        break;
                    }
                    list.remove(0);
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

复制代码

[图片上传失败...(image-f2a701-1665715743894)]

Java接口可以多继承吗?

java类是单继承的。classB extends classA java接口可以多继承。Interface3 extends Interface0, Interface1, interface…… 不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢? 但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。

(byte)300==(byte)100+(short)200?

答:false。 java中byte的取值范围是-128~127,发生上溢下溢时要模256;130>127上溢,故模256得130,仍溢出,再减256得-126,所以s=-126。300>127上溢,故模256得44,44在byte取值范围内,故s=44. 300 的 二进制是:100101100;byte强制转换后从右往左取8位为:00101100;因为第八位为0所以为正数,又知道正数的原反补码都相同;所以00101100转换为十进制是:44(32+8+4) (byte)100+(short)200,byte和short的结果会自动转为short不会溢出。所以(byte)100+(short)200=(short)300,而(byte)300的结果是44.即两者不相等。

操作系统具有进程管理,存储管理,文件管理和设备管理的功能,下列有关描述中,哪一项是不正确的? (A)

A.进程管理主要是对程序进行管理 B.存储管理主要管理内存资源 C.文件管理可以有效的支持对文件的操作,解决文件共享、保密和保护问题 D. 设备管理是指计算机系统中除了CPU和内存以外的所有输入输出设备的管理

this和super正确的是(C):

A、都可以用在main()方法中  B、都是指一个内存地址  C、不能用在main()方法中  D、意义相同 public static void main(String[] args),main方法是静态方法,不可以使用对象特有的this或super关键字。

引用计数法是JVM GC算法吗?

答:是。

能在try{}catch(){}finally{}结构的finally{}中再次抛出异常吗?

答:能。 Exception in thread “main” java.lang.Exception: 异常4 at com.test.FinallyTry.f(FinallyTry.java:16) at com.test.FinallyTry.main(FinallyTry.java:5)

--------在finally中抛异常或者return 会掩盖之前的异常

HTTP2新特性?

答:减少头部的体积、添加请求优先级、服务器推送、多路复用。

索引可以将随机IO变成顺序IO吗?

答:对。 随机IO:假设我们所需要的数据是随机分散在磁盘的不同页的不同扇区中的,那么找到相应的数据需要等到磁臂(寻址作用)旋转到指定的页,然后盘片寻找到对应的扇区,才能找到我们所需要的一块数据,依次进行此过程直到找完所有数据,这个就是随机IO,读取数据速度较慢。 顺序IO:假设我们已经找到了第一块数据,并且其他所需的数据就在这一块数据后边,那么就不需要重新寻址,可以依次拿到我们所需的数据,这个就叫顺序IO。

transient修饰的变量是临时变量吗?

答:对。

  • 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

  • transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现SERIALIZABLE接口。

  • 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。 注意点:在Java中,对象的序列化可以通过实现两种接口来实现,若实现的是SERIALIZABLE接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。

高、中、低三级调度。

高级调度:即作业调度,按照一定策略将选择磁盘上的程序装入内存,并建立进程。(存在与多道批处理系统中) 中级调度:即交换调度,按照一定策略在内外存之间进行数据交换。 低级调度:即CPU调度(进程调度),按照一定策略选择就绪进程,占用cpu执行。 其中低度调度是必须的。

下面那个查看80端口是否被占用?

  • 方式一:ps -ef |grep 80

  • 方式二:netstat -anp |grep :80

  • 方式三:lsof -i:80

  • 方式四:netstat -tunlp |grep :80

  • 方式五:netstat -an |grep :80

C++弱引用指针是那个?

weak_ptr也是一个引用计数型智能指针,但是它不增加对象的引用计数,即弱引用。与之相对,shared_ptr是强引用,只要有一个指向对象的shared_ptr存在,该对象就不会析构,直到指向对象的最后一个shared_ptr析构或reset()时才会被销毁。 利用weak_ptr,我们可以解决常见的空悬指针问题以及循环引用问题。

下面不属于类的构造方法具备的特点是( )。

  • A.没有返回值

  • B.用户可以通过new自动调用。

  • C.构造方法名必须和类名相同

  • D.用户可以直接调用

  • D [解析] 构造方法是类中的一种特殊方法,是为对象初始化操作编写的方法,用它来定义对象的初始状态。在Java语言中的每个类都有构造方法,它也是由方法名、参数和方法体组成。构造方法名必须与类名相同,它没有返回值,用户不能直接调用它,只能通过new自动调用。

spx协议工作在哪一层?

SPX(Sequenced Packet Exchange protocol,顺序包交换)协议是Novell开发的用在NetWare中的协议,用来确保信息成功传送。SPX使用NetWare的IPX协议作为它的传递机制并在网络结点间提供客户服务器和层对层的交互通信。它工作在传输层。

TCP第四次挥手后为什么要等待2MSL后才断开链接?等待时间为什么是2MSL?

  • 答:1.为了保证客户端最后一次挥手的报文能够到达服务器,若第4次挥手的报文段丢失了,服务器就会超时重传第3次挥手的报文段,所以客户端此时不是直接进入CLOSED,而是保持TIME_WAIT(等待2MSL就是TIME_WAIT)。当客户端再次收到服务器因为超时重传而发送的第3次挥手的请求时,客户端就会重新给服务器发送第4次挥手的报文(保证服务器能够收到客户端的回应报文)。最后,客户端、服务器才真正断开连接。说白了,等待2MSL就是为了确保服务器能够受到客户端最后的回应。

  • 2.如果客户端直接CLOSED,然后又再次向服务器发起一个新连接,谁也不能保证新发起的连接和刚关闭的连接的端口号是不同的,有可能新、老连接的端口号就是一样的。假设新、老连接端口号一致,若老连接的一些数据仍滞留在网络中,这些滞留数据在新连接建立后才到达服务器,鉴于前后端口号一致,TCP协议就默认这些数据属于新连接,于是数据就这样乱成一锅粥了。所以TCP连接还要在TIME_WAIT状态下等待2MSL,确保所有老连接的数据都在网络中消失!

  • 3.首先说明什么是MSL,MSL是Maximum Segment Lifetime的缩写,译为报文最大生存时间,也就是任何报文在网络上存活的最大时间,一旦超过该时间,报文就会被丢弃。2MSL也就是指的2倍MSL的时间。 为什么是2倍呢?

  • 主动断开的一侧为A,被动断开的一侧为B。

  • 第一个消息:A发FIN

  • 第二个消息:B回复ACK

  • 第三个消息:B发出FIN此时此刻:B单方面认为自己与A达成了共识,即双方都同意关闭连接。此时,B能释放这个TCP连接占用的内存资源吗?不能,B一定要确保A收到自己的ACK、FIN。所以B需要静静地等待A的第四个消息的到来:

  • 第四个消息:A发出ACK,用于确认收到B的FIN

当B接收到此消息,即认为双方达成了同步:双方都知道连接可以释放了,此时B可以安全地释放此TCP连接所占用的内存资源、端口号。所以被动关闭的B无需任何wait time,直接释放资源。但,A并不知道B是否接到自己的ACK,A是这么想的: 1)如果B没有收到自己的ACK,会超时重传FiN那么A再次接到重传的FIN,会再次发送ACK 2)如果B收到自己的ACK,也不会再发任何消息,包括ACK 无论是1还是2,A都需要等待,要取这两种情况等待时间的最大值,以应对最坏的情况发生,这个最坏情况是: 去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL)。这恰恰就是2MSL( Maximum Segment Life)。等待2MSL时间,A就可以放心地释放TCP占用的资源、端口号,此时可以使用该端口号连接任何服务器。同时也能保证网络中老的链接全部消失。

进程有那些状态,并简单描述一下?

  • 进程其基本状态有5种,即创建状态、就绪状态、运行状态、阻塞状态、终止状态。

  • 创建状态:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。

  • 就绪状态:进程已经准备好,已分配到所需资源,只要分配到CPU就能够立即运行。

  • 执行状态:进程处于就绪状态被调度后,进程进入执行状态。

  • 阻塞状态:正在执行的进程由于某些事件而暂时无法运行,进程受到阻塞。

  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行。

  • 进程是指计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。

  • 进程状态是指一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程,进程状态即体现一个进程的生命状态。

创建NIO客户端代码。

package com.cn.niochat;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.util.Scanner;

/**
 * 用Java实现nio的客户端
 */publicclassNioClient {

    publicvoidstart()throws IOException {
        /**
         * 链接服务器端
         */SocketChannelsocketChannel= SocketChannel.open(newInetSocketAddress("127.0.0.1",8000));

        //向服务器端发送数据//从命令行获取数据,获取键盘的输入Scannerscanner=newScanner(System.in);
        while (scanner.hasNextLine()){
            //获取这一行数据Stringrequest=  scanner.nextLine();
           //如果有数据,则发送,且数据不为空if(request != null && request.length() > 0){
               socketChannel.write(Charset.forName("UTF-8").encode(request));
           }
        }
    }

    publicstaticvoidmain(String[] args)throws IOException {
        NioClientnioClient=newNioClient();
        nioClient.start();
    }
}

复制代码

获取一个类的class实例的方法有那些?

  • (1).调用运行时类本身的.class属性     Class clazz = String.class;

  • (2),通过运行时类的对象获取     public final Class<?> getClass()是非静态方法.     Person p = new Person();     Class clazz = p.getClass();

  • (3)通过Class的静态方法获取:体现反射的动态性     String className = “java.util.commons”;     Class clazz = Class.forName(className);

  • (4)通过类的加载器     String className = “java.util.commons”;     ClassLoader classLoader = this.getClass().getClassLoader();     Class claz = classLoader.loadClass(className);

a、b、c、d、e、f字符出现的次数分别为16、5、12、17、10、25。编码的最少字节是多少?

[图片上传失败...(image-99573a-1665715743893)]

(25+16+17)×2+12×3+(5+10)×4=212。

MySQL中获得结果集的记录并在此记录上做特殊的操作的最佳对象是?

游标。

System.out.println(1+1+“1”)输出21。System.out.println(“1”+1+1);输出111。

Java的+表达式计算是从左往右的。若是两个整形,会求值,若其中之一是String,会拼接,且结果为String。1+1+“1”,先计算1+1,因为两个都是整形,求值=2,然后2+“1”,拼接,所以是 21,而“1”+1+1,先计算“1”+1,因为有String,结果为’11",再“11”+1就是“111”。

成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边。

意思是:当父类变量引用子类对象时(Fu f = new Zi(); ),在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写)。

classFu {
    intnum = 5;
    staticvoidmethod4() {
        System.out.println("fu method_4");
    }
    voidmethod3() {
        System.out.println("fu method_3");
    }
}

classZiextendsFu {
    intnum = 8;
    staticvoidmethod4() {//注意点:静态方法不能重写
        System.out.println("zi method_4");
    }
    voidmethod3() {
        System.out.println("zi method_3");
    }
}

classDuoTaiDemo4 {

     publicstaticvoidmain(String[] args) {
         Fu f = new Zi();
         System.out.println(f.num);//与父类一致
         f.method4();//与父类一致
         f.method3();//编译时与父类一致,运行时与子类一致
         Zi z = new Zi();
         System.out.println(z.num);
         z.method4();
         z.method3();
     }
}

复制代码

1开头的http状态码

  • 表示临时响应并需要请求者继续执行操作的状态代码。

  • 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。

  • 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2开头的http状态码

  • 表示请求成功

  • 200 成功处理了请求,一般情况下都是返回此状态码;

  • 201 请求成功并且服务器创建了新的资源。

  • 202 接受请求但没创建资源;

  • 203 返回另一资源的请求;

  • 204 服务器成功处理了请求,但没有返回任何内容;

  • 205 服务器成功处理了请求,但没有返回任何内容;

  • 206 处理部分请求;

3xx (重定向)

  • 重定向代码,也是常见的代码

  • 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。

  • 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

  • 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

  • 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

  • 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

  • 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。

  • 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4开头的http状态码表示请求出错

  • 400 服务器不理解请求的语法。

  • 401 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。

  • 403 服务器拒绝请求。

  • 404 服务器找不到请求的网页。

  • 405 禁用请求中指定的方法。

  • 406 无法使用请求的内容特性响应请求的网页。

  • 407 此状态代码与 401类似,但指定请求者应当授权使用代理。

  • 408 服务器等候请求时发生超时。

  • 409 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。

  • 410 如果请求的资源已永久删除,服务器就会返回此响应。

  • 411 服务器不接受不含有效内容长度标头字段的请求。

  • 412 服务器未满足请求者在请求中设置的其中一个前提条件。

  • 413 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

  • 414 请求的 URI(通常为网址)过长,服务器无法处理。

  • 415 请求的格式不受请求页面的支持。

  • 416 如果页面无法提供请求的范围,则服务器会返回此状态代码。

  • 417 服务器未满足”期望”请求标头字段的要求。

5开头状态码并不常见,但是我们应该知道

  • 500 (服务器内部错误) 服务器遇到错误,无法完成请求。

  • 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。

  • 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

  • 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

  • 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

  • 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

  • 记忆口诀:1临(临时响应)2成(请求成功)3定向(重定向)4请(请求出错)5服(服务器错误)

最后

如果需要一线大厂Java面试题总结+各知识点学习思维导+一份300页pdf文档的Java核心知识点总结**【+ jcc4261获取】**这些资料的内容都是面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。

阿里巴巴笔试真题 秋招的时候自己搜集的资料,阿里巴巴的笔试真题,可以参考一下 立即下载

相关推荐

阿里巴巴 java笔试 试题 有两份

这里有两套阿里巴巴java开发工程师德笔试试题,和朋友们分享

阿里巴巴java方向笔试题 带详细答案

方法重写又称方法覆盖。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。...

segegefe的博客 1408

阿里java内部面试题整理

java面试前必看

2024年校招进阿里P5全套200道java面试笔试题及答案

当然,大家有没有发现?除了这些,还缺失一个非常重要的部分,那就是校招进大厂必备的一个重要的部分:数据结构与算法!二、Java核心面试基础。

2501_90237187的博客 370

【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Pytorch-DirectML篇)】

这篇是之前Tensorflow-DirectML的姊妹篇,如果对TF感兴趣的可以搜索我的博文。 首先我们丢一个官网地址,但是官网那个会误导新人如果你按那个操作的话。 https://docs.microsoft.com/en-us/windows/ai/directml/gpu-pytorch-windows 这里用我的方法操作: 首先声明一下,因为我的显卡是AMD RX6600,不带XT(性能和RTX3060 12G版本半斤八两),所以目前没有最新的WSL2驱动,如果有了的话欢迎告知我,所以我这里就.

weixin_44029053的博客 2万+

Pinocchio 安装教程|机器人学的必备库

安装pinocchio,不要安装pip3 install pinocchio!

darcsdn 1662

2024阿里Java笔试总结,java面试准备内容

程序员代码面试指南-IT名企算法与数据结构题目最优解:栈和队列部分(10)1. 设计一个有getMin功能的栈(士★☆☆☆)2. 由两个栈组成的队列(尉★★☆☆)3. 如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆)4. 猫狗队列(士★☆☆☆)5. 用一个栈实现另一个栈的排序(士★☆☆☆)6. 用栈来求解汉诺塔问题(校★★★☆)7. 生成窗口最大值数组(尉★★☆☆)8. 构造数组的MaxTree(校★★★☆)9. 求最大子矩阵的大小(校★★★☆)10. 最大值减去最小值小于或等于num的子数组数量(校★★★

H1767410的博客 1364

深入解析Dataloader中shuffle机制与随机种子对模型训练的影响

本文深入探讨了Dataloader中shuffle机制与随机种子对机器学习模型训练的影响。通过实际案例分析,详细解释了数据打乱顺序的必要性、随机种子的正确设置方法以及两者协同工作的原理,帮助开发者避免常见陷阱并提升模型训练效果。

weixin_29166013的博客 141

阿里Java社招面试真题200+:缓存+分布式+JVM+高并发+NIO+框架

JVM包括运行区域划分/常考的JVM算法需要会等,除了这些就是计算机网络(TCP的三次握手/四次挥手/http常见状态码)(TCP的三次握手/四次挥手/http常见状态码/TCP的一些重要特性/TCP/UDP的区别等等等)这一份阿里面试宝典,其中含括的知识点:VM、锁、高并发、反射、Spring原理、微服务、Zookeeper、数据库、数据结构等等!数据库(mysql的两种常见引擎的区别/索引的种类/索引的原理等等等)Java面试题:Java基础知识解析。阿里面试题:Java多线程解析。...

m0_62051288的博客 767

LVGL v9的lv_scale控件实战:5分钟打造动态仪表盘(附完整代码)

本文详细介绍了LVGL v9中lv_scale控件的实战应用,通过5个关键步骤快速打造动态仪表盘。文章涵盖核心特性解析、代码实现、样式定制及性能优化,适用于工业HMI、智能家居等场景,并附完整代码示例。

gin88的博客 262

Seedance2.5本地部署:从环境配置到批量生图的工程实践指南

最近在几个技术社群里,看到不少人在讨论 AI 生图和视频工具。有人抱怨在线服务要么贵、要么慢、要么生成内容受限;也有人尝试了各种“免费”方案,结果不是功能残缺就是暗藏收费陷阱。就在大家觉得“又好又免费”的本地部署方案门槛太高时,Seedance2.5 突然冒了出来,而且口号相当直接:本地部署、完全免费、不联网、功能对标甚至超越一些付费产品。 但这类宣传我们见多了,真正的问题是:它到底能不能在普通开发者的机器上跑起来?生成质量是否真的可用?长期使用会不会遇到模型崩溃、依赖冲突或者资源爆炸?更重要的是,对于一个

weixin_27419879的博客 1129

纯干货分享!2020阿里java岗笔试面试题总结(附答案)

前言 2020金九银十马上结束,现为大家整理了这次金九银十面试阿里的面试题总结,都是我从朋友那拿到的面试真题,话不多说,满满的干货分享给大家! int a=10是原子操作吗? 是的。  注意点: i++(或++i)是非原子操作,i++是一个多步操作,而且是可以被中断的。i++可以被分割成3步,第一步读取i的值,第二步计算i+1;第三部将最终值赋值给i。  * int a = b;不是原子操作。从语法的级别来看,这是也是一条语句,是原子的;但是从实际执行的二进制指令来看,由于现代计算机C

欢迎您访问我的公众号【前程有光】 1320

契约锁代码审计分析

但是正常来讲,定义了这么多的路由,肯定会有一个通用的判断逻辑,来判断请求的url是否和这些路由匹配。POC中有一点值得注意,Spring新一些的版本中支持以表单的形式来为参数赋值,且无需用注解。但是需要注意4.2.8的代码逻辑和新版本中的不同,此漏洞可能存在于版本大于4.2.8的版本中。方法用于解析LICENSE,先进行AES解密,再从字符串转换成json格式的License。loadPath实际判断传入的path是否和下面的path相等,如果不相等返回null。,如果包含这三个中的一个就会抛出异常。

好记性不如烂笔头 5718

纯干货分享!2022阿里java岗笔试面试题总结(附答案)

答:1.为了保证客户端最后一次挥手的报文能够到达服务器,若第4次挥手的报文段丢失了,服务器就会超时重传第3次挥手的报文段,所以客户端此时不是直接进入CLOSED,而是保持TIME_WAIT(等待2MSL就是TIME_WAIT)。当客户端再次收到服务器因为超时重传而发送的第3次挥手的请求时,客户端就会重新给服务器发送第4次挥手的报文(保证服务器能够收到客户端的回应报文)。最后,客户端、服务器才真正断开连接。说白了,等待2MSL就是为了确保服务器能够受到客户端最后的回应。

老男孩的架构路 743

告别C盘空间焦虑!Miniforge环境路径精准配置全攻略

本文深入解析Miniforge虚拟环境默认占用C盘空间的根本原因,即未正确配置`.condarc`文件中的`envs_dirs`路径优先级。通过详细的诊断步骤与配置命令,指导用户将环境路径精准迁移至指定磁盘(如D盘),并分享禁用自动激活、使用`--prefix`参数等高阶技巧,帮助开发者彻底告别C盘空间焦虑,实现虚拟环境的整洁与可控管理。

weixin_28831399的博客 238

基于Matlab的深度学习OFDM系统信号检测

在接收端,我们首先去除循环前缀,然后对接收到的信号进行FFT变换和QAM解调。在通信系统中,正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)是一种常用的调制技术,它可以将高速数据流分成若干个低速子载波进行传输,提高了信道利用率和抗干扰性能。接下来,我们使用训练好的神经网络对QAM调制后的数据进行检测,得到估计的FFT变换结果。深度学习方法可以通过大量的训练数据来学习信号的特征,并具有一定的适应能力,在某些情况下可能能够获得更好的检测性能。

2301_79325657的博客 296

2个月成功逆袭!最新分享阿里(Java岗

分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。

2301_81749759的博客 724

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

准备JAVA秋招, 30个值得学习上岸大厂、干货型纯个人账号博主分享

30个纯个人秋招上岸博主、Java知识干货大佬分享,博客、B站、小红书收集纯个人账号免费分享,同等层次同学借鉴学习

2401_85506965的博客 3104

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

2025年最新版Java面试题及答案整理(纯干货,超详细)

备战面试、Java基础+集合+多线程+JVM、计算机基础、数据库面试题总结、常用框架面试题总结、系统设计、优质面经、微服务/分布式、真实大厂面试现场。2.1.10. String StringBuffer和 StringBuilder的区别是什...2.3.17.说说synchronized关键字和volatile关键字的区别。我觉得这种⽅法 特别极端,⽽且在稍有⼀点经验的⾯试官⾯前是根本没有⽤的。2.1.13.在Java中定义一个不做事且没有参数的构造方法...对象实体与对象引用...

程序员高级码农的博客 3310

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring Boot 返回纯HTML,2024年最新java面试题答案

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf。

2401_83977689的博客 856

上千道Java全新核心面试题及答案分享,快来通透一下(1)

腾讯、阿里、字节跳动、百度、美团Java面试题合集阿里面试集锦.docx阿里面试题目总结-6.docx阿里面试问题总结.docx字节跳动(抖音面试题) .docx最新BAT大数据面试题.docx腾讯201 6研发I程师编程题_-.docx阿里高级Java面试题70道.docx腾讯201 6研发I程师编程题5.docx最新BAT《前端必考面试》.docx最全的阿里java面经(清晰版) .pdf最新BAT java经典必考面试题.docx阿里实习生客户端笔试题目解析-3.docx。

youpccc的博客 628

2024最新腾讯Java面试分享,java程序员面试笔试宝典答案

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典Java核心知识整理Java核心知识Spring全家桶(实战系列)其他电子书资料Step3:刷题既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。**以下是我私。

m0_60607371的博客 863

mongodb面试题,2024阿里Java笔试总结

本文主要来分析JMM内存模型,英文名JAVA Memory Model,它是与计算机硬件有关的一个概念。为了保证共享内存的正确性(可见性、有序性、原子性),内存模型定义了共享内存系统中多线程程序读写操作行为的规范。

m0_60575487的博客 453

阿里丨腾讯丨字节丨美团等多家大厂1万+Java岗面试题(附答案)(2)

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。请转发本文支持一下本文已被。

2401_84584817的博客 1172
上一篇: IT行业真的在走下坡路吗?现在的环境下一个好的Java程序员需要掌握哪些核心技术
下一篇: 阿里架构师十年心血,总结出的一套java架构知识体系(内部学习使用)
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值