首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java常见面试题汇总

这样,在调用方法时,会根据实际对象的类型决定调用哪个版本的方法,这就是动态绑定或多态性的体现 二、什么是重载,什么是重写 重载 重载是指在同一个类中定义多个方法,它们具有相同的名字但参数列表有所不同...子类方法抛出的异常必须与父类一致,或者是其父类异常的子类。 重写通常用于在子类中提供的父类方法的具体实现,以实现多态性。例如,子类对父类方法进行拓展或修改以适应特定需求。...面向连接:数据传输之前客户端和服务器端必须建立连接 可靠的:数据传输是有序的 要对数据进行校验 TCP三次握手 为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手...,证明客户端的发送能力正常 第二次握手:服务器端接收到报文并向客户端发送报文,证明服务器端的接收能力、发送能力正常 第三次握手:客户端向服务器发送报文,证明客户端的接收能力正常 通俗解释: 以电话通联为例...第一次挥手 客户端发出连接释放报文,并且停止发送数据。

16510

Flask 中的上下文管理和请求钩子

,会有一些准备工作或扫尾工作需要处理,如在请求开始时,建立数据库连接,进行用户权限校验,在请求结束时,处理数据的格式等。...Flask 提供了四种请求钩子装饰器: 1. before_first_request 在处理第一个请求前执行,如验证第一次访问网站时用户是否登录。...5000/ ,后端控制台的打印结果如下: 在处理第一个请求前执行 在每次请求前执行 如果没有抛出错误,在每次请求后执行 异常:None 在每次请求后执行 刷新一下浏览器页面,发送第二次请求,后端控制台的打印结果如下...: 在每次请求前执行 如果没有抛出错误,在每次请求后执行 异常:None 在每次请求后执行 可以看到,第一次请求时,四个钩子函数都执行了,第二次请求时,before_first_request 没有执行...,因为它只在第一次请求时执行,而两次请求中,访问的接口 / 对应的视图函数 index() 中都没有异常,所以 after_request 都会执行。

1.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    活久见!TCP两次挥手,你见过吗?那四次握手呢?

    注意,虽然第二次和第三次挥手之间,被动方是能发数据到主动方的,但主动方能不能正常收就不一定了,这个待会说。...第三次挥手:在被动方在感知到第二次挥手之后,会做了一系列的收尾工作,最后也调用一个 close(), 这时候就会发出第三次挥手的 FIN-ACK。 第四次挥手:主动方回一个ACK,意思是收到了。...第一次send(), 一般会成功返回。 第二次send()时。如果主动方是通过 shutdown(fd, SHUT_WR) 发起的第一次挥手,那此时send()还是会成功。...第一次挥手过后,一端状态就会变成 FIN-WAIT-1。正常情况下,是要等待第二次挥手的ACK。但实际上却等来了 一个第一次挥手的 FIN包, 这时候连接状态就会变为CLOSING。...处于CLOSING状态下时,只要再收到一个ACK,就能进入 TIME-WAIT 状态,然后等个2MSL,连接就彻底断开了。这跟正常的四次挥手还是有些差别的。

    52020

    C# 托管资源与非托管资源

    像数组,用户定义的类、接口、委托,object,字符串等引用类型,栈上保存着一个地址而已,当栈释放后, 即使对象已经没有用了,但堆上分配的内存还在,只能等GC收集时才能真正释放 ;但注意int,float...所以,当我们在类中封装了对非托管资源的操作时,我们就需要显式,或者是隐式的释放这些资源。...所以有析构函数的对象,需要两次,第一次调用析构函数,第二次删除对象。而且在析构函数中包含大量的释放资源代码,会降低垃圾回收器的工作效率,影响性能。...托管资源的回收工作是不需要人工干预的,有.NET运行库在合适调用垃圾回收器进行回收。...在.NET中应该尽可能的少用析构函数释放资源。在没有析构函数的对象在垃圾处理器一次处理中从内存删除,但有析构函数的对象,需要两次,第一次调用析构函数,第二次删除对象。

    3.2K10

    iOS14 Beta4崩溃修改

    虽然是由于升级beta版系统导致的,但还是要排查出具体原因,然后尽快适配。所以我说一下我发现的哪个API导致的,供大家参考一下。...但是在验证过程中,由于我们使用这个是把请求的对象转为参数字典,这个地方虽然不崩溃了,但是正常应该存在的值,也还是没有,换句话说,就是所有请求中使用这个方法转字典的,都失败了。。。。...(mirror.children)就返回空了,所有就是AnyRandomAccessCollection()这个方法在iOS14 beta4中不能正常工作了。...于是再次修改 如图所示,第一次修改: [1597027634294.jpg] 第二次修改: [1597028081543.jpg] 最后 所以我们项目里在iOS14 beta4中的崩溃是由于SexyJson...库中的强制解包导致的,但是真正的原因是iOS14 beta4中AnyRandomAccessCollection()此方法不能正常工作了。

    73951

    Java 引用类型简述

    对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。.../** * 软引用:对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收( 因为是在第一次回收后才会发现内存依旧不充足,才有了这第二次回收 )。...第一次有System.gc();触发;第二次在在分配new byte[5*1024*740]时触发,然后发现内存不够,于是将softRef列入回收返回,接着进行了第三次full gc。...第一次有System.gc();触发;第二次在在分配new byte[5*1024*740]时触发,然后发现内存不够,于是将softRef列入回收返回,接着进行了第三次full gc。...以及“所以连接调用System.gc()其实作用不大”这个说法不对,应该说连续调用System.gc()对性能可定是有影响的,但作用之一就是可以清除“漂浮垃圾”。

    73770

    LockSupport的 park 方法是怎么响应中断的?

    一种是,捕获异常之后,再重新抛出异常,让上层代码知道。另一种是,在捕获异常时,通过 interrupt 方法把中断状态重新设置为true。...开始唤醒阻塞线程 main结束唤醒 Thread-0第一次结束阻塞 第二次结束阻塞 当调用interrupt方法时,会把中断状态设置为true,然后park方法会去判断中断状态,如果为true,就直接返回...,然后往下继续执行,并不会抛出异常。...4) 调用wait方法会使当前线程释放锁资源,但使用的前提是必须已经获得了锁。而park不会释放锁资源。...如果把t2的锁换成this锁,即只要和t1不是同一把锁,则t1就会正常执行,然后把t2线程唤醒。打印结果如下: park前 unpark前 unpark后 park后

    3.2K10

    Wireshark使用入门

    第一次握手:建立连接时,客户端发送SYN到服务器,并进入SYN_SENT状态。 第二次握手:服务器收到请求后,回送SYN+ACK信令到客户端,此时服务器进入SYN_RECV状态。...2.2 第一次握手 第一次握手:建立连接时,客户端发送SYN到服务器,并进入SYN_SENT状态。 ? SYN :标志位,表示请求建立连接。...也是为了最小的代价验证会话双方的收发功能正常: 第一次握手成功:说明客户端的数据可以被服务端收到,说明客户端的发功能可用,说明服务端的收功能可用。但客户端自己不知道数据是否被接收。...对应上图最后一次服务端返回数据时SEQ是2737,LEN是450。客户端对接收数据做了两次返回确认,第一次ACK是2737,表示还没有完成数据接收。...第四次挥手:客户端收到了服务端对FIN的ACK后,进入FIN_WAIT2状态(等待服务端完成资源释放的一系列工作:然后释放你为创建这个连接所分配的资源,并通知我你关闭了); 客户端收到了服务端的FIN信令后

    1.3K91

    2023学习日志

    无奈将代码下载到本地运行后,发现windows平台下能够正常运行该前端项目,猜测可能是Linux系统下的一些环境配置问题……查找该问题时,发现mac平台上也会出现此问题,但mac上的命令无法在cloud...在运行若依后台管理系统的后端项目时,由于未配置好mysql和redis的连接设置而报错,最终修改默认设置后,能够正常运行该系统。...RSA算法共有四次握手,第一次由客户端发起,第二次由服务器端发起,da- 减少发送http请求(合并请求、减少资源重定向请求、延迟发送请求(在加载页面时,仅加载部分需要的数据)) 减少http响应大小(...第一次握手:传输客户端生成的随机数 第二次握手:传输服务器端生成的随机数及服务器端证书 第三次握手:在客户端验证证书后,再次发送生成的随机数 第四次握手:传输对于所有已发送信息计算出的摘要,防止信息被篡改...RSA握手的缺陷在于不具备前向保密性,一旦服务器私钥被泄露,之前的所有信息都能被解密 https的ECDHE握手 ECDHE算法基于椭圆曲线ECC ECHDHE算法的前两次握手与RSA算法基本相同,但第二次握手时

    21900

    TCP四次挥手中如果服务端没收到第四次挥手请求,服务端会一直等待吗?

    搬运一个在某乎的回答,水一篇文章吧。 TCP四次挥手 正常情况下。只要数据传输完了,不管是客户端还是服务端,都可以主动发起四次挥手,释放连接。...第二次挥手:在收到主动方的FIN报文后,被动方立马回应一个ACK,意思是"我收到你的FIN了,也知道你不再发数据了"。 上面提到的是主动方不再发送数据了。但如果这时候,被动方还有数据要发,那就继续发。...注意,虽然第二次和第三次挥手之间,被动方是能发数据到主动方的,但主动方能不能正常收就不一定了,这个待会说。...第三次挥手:在被动方在感知到第二次挥手之后,会做了一系列的收尾工作,最后也调用一个 close(), 这时候就会发出第三次挥手的 FIN-ACK。 第四次挥手:主动方回一个ACK,意思是收到了。...其中第一次挥手和第三次挥手,都是我们在应用程序中主动触发的(比如调用close()方法),也就是我们平时写代码需要关注的地方。

    50930

    一日一技:使用装饰器实现类属性的懒加载

    为了让数据库在第一次使用时再创建连接,我们就要实现懒加载机制: import pymongo class MongoUtil: def __init__(self): connect...这样写确实实现了懒加载,但每一个操作都需要判断当前是否连接到了对应的集合中。这样就会出现大量的重复代码。...当 self.post第一次被调用时,它会正常连接集合,当第二次或以上访问 self.post时,就会直接使用第一次返回的对象,不会再次连接MongoDB的集合。 self.user同理。...可以看到,第二次调用 self.post时,并没有打印出 第一次访问self.post,因为第二次会直接使用之前的缓存。...而实际上, pymongo已经自动实现了懒加载机制,当我们直接 connect.tieba.post时,它并不会真的去连接MongoDB,只有当我们要增删改查集合里面的数据时,pymongo才会创建连接

    62730

    【图解】三次握手,四次挥手 —— 用心看这一篇就够了

    ,含义是:本报文段中的紧急数据的字数,紧急指针指出了紧急数据的末尾在报文段中的位置 当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。...第一次握手由客户端发送资源包给到服务端,若该过程正常,则得出结论:服务端接收、客户端发送服务正常 图 4 TCP 建立连接第一次握手示意图 2.第二次握手 第二次握手由服务端发送资源包给到客户端...,若该过程正常,则得出结论:服务端发送、客户端接收服务正常 图 5 TCP 建立连接第二次握手示意图 3.第三次握手 这里大家可能就会有疑问了?...其实并不是,第一、二次握手只是在单独的过程中得出服务正常的结论,但是在第二次握手结束后,服务端的接收能力和客户端的发送能力未知,这时候便有了 TCP 的第三次握手过程 第三次握手由客户端发送资源包给到服务端...,若该过程正常,则得出结论:服务端接收、客户端发送服务正常 图 6 TCP 建立连接第三次握手示意图 通过这三次的握手过程我们可以分析得到:第二次是对第一次握手的补充,第三次是对第二次握手的补充

    9.7K21

    23设计模式之 --------- 单例模式

    3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。...缺点:类加载时就初始化,浪费内存。 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变(final),所以天生是线程安全的。...这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。...我们常常认为正常的执行顺序会是 1,2,3 但往往在多线程的情况会影响他们执行顺序可能会执行 132 或者其他等等; 我们加入了volatile 使其具有了原子性的操作性能;就可以避免上次产的问题...想象一下,如果实例化 instance 很消耗资源,所以想让它延迟加载,另外一方面,又不希望在 Singleton 类加载时就实例化,因为不能确保 Singleton 类还可能在其他的地方被主动使用从而被加载

    8210

    关于三次握手与四次挥手你要知道这些

    三次握手的必要性 第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。 第二次握手:服务端发包,客户端收到了。...如果只有两次握手就建立连接会出现这种情况:客户端发出的连接请求报文段在某些网络节点长时间滞留了,以致延误到连接释放以后的某个时间才能到达服务端。...客户端: 客户端在接收到SYN+ACK包,它的TCP连接状态就为ESTABLISHED(已连接),表示该连接已经建立。...但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,"你发的FIN报文我收到了"。...最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。

    73240

    西安健康码又崩了!随便聊聊

    我平时上网也不少啊,但为啥我就看不到这些信息呢?怎么大数据天天给我推荐的都是些娱乐八卦、唱歌跳舞的内容! 本来我最近工作就老遇到大 Bug,就不要再让我感受 Bug 带来的痛苦了好嘛!...虽然听上去挺合理的,但总感觉哪里不太对劲。。。 人类为一个小系统让步?上千万人为几个搞系统的小团队让步?真就 “非必要时不亮码,必要时码不亮” 了。 据说后来,该局长被停职检查。。。...所以,如果健康码第一次的崩溃是因为网络阻塞,按道理来说除了这么大的事故肯定会吸取教训,对网络进行 扩容 等措施的,如果做了扩容,第二次的崩溃就不应该再甩锅给网络了。...但现实恰恰相反,第二次崩溃依然宣称是网络阻塞,那我肯定是不信了。 而且有了第一次的经验,第二次又遇到了同样的网络阻塞问题,真的要修复好几个小时么?...当然,如果这件事情真的是天灾,就当我在扯犊子吧。 大概是这样,就随便聊聊,希望以后自己设计系统时能长点心,尽量不要因为自己的失误影响到其他人。 共勉!

    1.7K60

    一个有关tcp的非常有意思的问题

    假设以下场景: 在tcp建立连接后,先主动关闭其服务端,之后再在客户端下对其socket进行写操作,正常思维都会认为,这个写操作肯定会返回错误吧? 还真不一定。...第一次write成功! 第二次write失败: Broken pipe 当客户端提示关闭服务端时,要切换到对应的terminal,关闭服务端。...这里大概解释下tcpdump的输出: 前三个包是tcp的三次握手,完成之后代表tcp建立连接成功。 第四个包是我们在关闭服务端时,服务端发给客户端的fin包,表示关闭连接请求。...由tcpdump的输出可以确定,第一次write的确是写成功了,但为什么呢?明明服务端的socket都已经关闭了,为什么还可以发送呢?并且为什么第一次可以发送,第二次就不行了呢?...所以,在我们第二次调用write时,当执行到tcp_sendmsg_locked方法时,就直接跳到了do_error,即:返回err给用户。 至此,就完美解释了,为什么会有上述奇怪的现象。

    87410

    LoadRunner脚本日志定位问题案例

    小编说:在实际工作中,很多使用LoadRunner 的测试人员开发Vuser 脚本时总会遇到这样或那样的问题,影响到性能测试工作的正常进展。...为了分析问题将脚本最终简化成如例4-38 所示,但问题仍然存在。 ? 第二步:分析目标测试模块的日志记录环节,确认没有问题。 第三步:通过监控网络性能,进一步确认了网络没有问题。...…… 在上面的报文接收过程中,可以看到一共进行了3 次接收数据操作:第一次接收了9个字节;第二次接收了651 个字节;第三次接收时Socket 已经关闭因此完成了接收。...两次接收时间相差了203ms,这不是正常情况下的网络延迟时间。...因此,可以初步怀疑应用程序是分了两次来发送报文:第一次发送了报文头;第二次发送了报文体;之后断开了Socket 连接,所以看到了Vuser 第三次接收报文时没有收到任何内容,并完成接收报文函数的执行。

    49810

    SIGPIPE

    当服务器close一个连接时,若client端接着发数据。...根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。...TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包....对一个已经收到FIN包的socket调用read方法, 如果接收缓冲已空, 则返回0, 这就是常说的表示连接关闭. 但第一次对其调用write方法时, 如果发送缓冲没问题, 会返回正确写入(发送)....在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。

    53820
    领券