考研后开始秋招面试的一些点

**

考研后开始秋招面试的一些点

关于技术记录

**

一.在java中integer和int的区别

两者的区别主要体现在以下几个方面:
1、数据类型不同:int 是基础数据类型,而 Integer 是包装数据类型;
2、默认值不同:int 的默认值是 0,而 Integer 的默认值是 null;
3、内存中存储的方式不同:int 在内存中直接存储的是数据值,而 Integer 实际存储的是对象引用,当 new 一个 Integer 时实际上是生成一个指针指向此对象;
4、实例化方式不同:Integer 必须实例化才可以使用,而 int 不需要;
5、变量的比较方式不同:int 可以使用 == 来对比两个变量是否相等,而 Integer 一定要使用 equals 来比较两个变量是否相等。

二.定位:
定位指的就是将指定的元素摆放到页面的任意位置,通过定位可以任意的摆放元素, 通过position属性来设置元素的定位
可选值:
static:默认值,元素没有开启定位
relative:开启元素的相对定位
absolute:开启元素的绝对定位
fixed:开启元素的固定定位(也是绝对定位的一种)

  1. 当元素的position属性设置为relative时,则开启了元素的相对定位

                1.当开启了元素的相对定位以后,而不设置偏移量时,元素不会发生任何变化
                2.相对定位是相对于元素在文档流中原来的位置进行定位
                3.相对定位的元素不会脱离文档流
               4.相对定位会使元素提升一个层级
               5.相对定位不会改变元素的性质,块还是块,内联还是内联
    

当开启了元素的定位(position属性值是一个非static的值)时,可以通过left right top bottom四个属性来设置元素的偏移量
left:元素相对于其定位位置的左侧偏移量
right:元素相对于其定位位置的右侧偏移量
top:元素相对于其定位位置的上边的偏移量
bottom:元素相对于其定位位置下边的偏移量
通常偏移量只需要使用两个就可以对一个元素进行定位, 一般选择水平方向的一个偏移量和垂直方向的偏移量来为一个元素进行定位
2. 当position属性值设置为absolute时,则开启了元素的绝对定位

1.开启绝对定位,会使元素脱离文档流
2.开启绝对定位以后,如果不设置偏移量,则元素的位置不会发生变化
3.绝对定位是相对于离他最近的开启了定位的祖先元素进行定位的(一般情况,开启了子元素的绝对定位都会同时开启父元素的相对定位)如果所有的祖先元素都没有开启定位,则会相对于浏览器窗口进行定位
4.绝对定位会使元素提升一个层级
5.绝对定位会改变元素的性质, 内联元素变成块元素,块元素的宽度和高度默认都被内容撑开

3.当元素的position属性设置fixed时,则开启了元素的固定定位

   固定定位也是一种绝对定位,它的大部分特点都和绝对定位一样 ,不同的是: 

固定定位永远都会相对于浏览器窗口进行定位 ,固定定位会固定在浏览器窗口某个位置,不会随滚动条滚动,IE6不支持固定定位
4.层级

如果定位元素的层级是一样,则下边的元素会盖住上边的,通过z-index属性可以用来设置元素的层级,可以为z-index指定一个正整数作为值,该值将会作为当前元素的层级,层级越高,越优先显示,对于没有开启定位的元素不能使用z-index

三.java锁的理解
1:锁是什么,有什么用?

锁主要用来实现资源共享的同步。只有获取到了锁才能访问该同步代码,否则等待其他线程使用结束释放锁。

2:有哪几种锁?

这里主要针对:synchronize和Lock(因为面试就是问这两个)。

synchronize: 可以放在方法前面;也可以放在代码块前面,但需要指定上锁的对象。通常和wait,notify,notifyAll一块使用。wait:释放占有的对象锁,释放CPU。 sleep:则是释放CPU,但是不释放占有的对象锁。

notify:唤醒等待队列中的一个线程,使其获得锁进行访问。

notifyAll:唤醒等待队列中等待该对象锁的全部线程,让其竞争去获得锁。

Lock:拥有synchronize相同的语义,但是添加一些其他特性,如中断锁等候和定时锁等候,所以可以使用lock代替synchronize。

lock():以阻塞式获取锁,没有获取到一直等待,不会被中断。

tryLock(): 获取一下,获取到就返回true,没获取到就返回false。

tryLock(long timeout,TimeUnit unit):获取到返回true,没获取到等待给定的时间,还没获取到就返回false。

lockInterruptibly() : 与lock类似,但是没有获取锁会进入到休眠状态,直到获得锁或者当前线程被别的线程中断。

3:两者的区别?

性能不一致:资源竞争激励的情况下,lock性能会比synchronize好,竞争不激励的情况下,synchronize比lock性能好。

锁机制不一样:synchronize是在JVM层面实现的,系统会监控锁的释放与否。lock是代码实现的,需要手动释放,在finally块中释放。可以采用非阻塞的方式获取锁。

用法不一样:synchronize可以用在代码块上,方法上。lock通过代码实现,有更精确的线程语义。

四.三次握手和四次挥手的理解

第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

(SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。)

(​​​SYN-SENT:传输控制协议(英语:Transmission Control Protocol, TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。)

第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

(ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

在TCP/IP协议中,如果接收方成功的接收到数据,那么会回复一个ACK数据。通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。

第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。

第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。 [4]

第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。

五.对设计模式的理解
1、单例模式,以及他解决的问题,应用的环境,解决的方案,模式的本质
在任何时间内只有一个类实例存在的模式,需要有一个从中进行全局访问和维护某种类型数据的区域的环境下使用单例模式,解决方案就是保证一个类只有一个类实例存在,本质就是实例共用同一块内存区域

2、工厂模式,以及他解决的问题,应用的环境,解决的方案,模式的本质
利用工厂来解决接口选择的问题的模式
应用环境:当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定
创建的对象时,就需要用到工厂模式
解决方案:定义一个创建对象的接口,让子类来决定具体实例化哪一个类
本质就是根据不同的情况来选择不同的接口

在这里插入图片描述

class Solution {
    public int uniquePaths(int m, int n) {
        // 创建棋盘
        int[][] board = new int[m][n];
        // 将第0列的格子路径设为1
        for (int i = 0; i < m; i++) {
            board[i][0] = 1;
        }
        // 将第0行的格子路径设为1
        for (int j = 0; j < n; j++) {
            board[0][j] = 1;
        }
        // 往后累加格子的路径数
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                board[i][j] = board[i-1][j] + board[i][j-1];
            }
        }
        return board[m-1][n-1];
    }
}

题目中告诉我们,需要抵达棋盘的终点(右下角),并且机器人只能一次向右或者向下移动一步,那么当我们抵达一个格子时,只能是从它的左边或者上边过来,由此我们可以推断出:

抵达一个格子的路径数 = 抵达这个格子左边格子的路径数 + 抵达这个格子上边格子的路径数;

即表达式为: f( i , j ) = f( i - 1 , j ) + f( i , j - 1 );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值