面试总结-----基础篇

版权声明:如需转载,请备注出处 https://blog.csdn.net/u013783065/article/details/82623449

 

简历:

1.自我介绍

2.介绍项目

  • 明确项目的周期。

  • 明确项目的价值。(为什么做这个项目,它解决了用户什么痛点,它带来什么价值?)

  • 明确项目的功能。(这个项目涉及哪些功能?)

  • 明确项目的技术。(这个项目用到哪些技术?)

  • 明确个人在项目中的位置和作用。(你在这个项目的承担角色?)

  • 明确项目的整体架构。

  • 明确项目的优缺点,如果重新设计你会如何设计。

  • 明确项目的亮点。(这个项目有什么亮点?)

  • 明确技术成长。(你通过这个项目有哪些技术成长?

基础:

面向对象的特征:

继承:继承父类的属性和方法

多态:允许不同类的对象对同一消息做出响应.多态性包括参数化多态性和包含多态性.多态性语言具有灵活/抽象/行为共享/代码共享的优势,很好的解决了应用程序函数同名问题

封装:把过程和数据包围起来,对数据的访问只能通过特定的界面.如私有变量,用set,get方法获取

抽象:就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口

final, finally, finalize 的区别?

final是关键字,被此关键字修饰的类不能再派生出子类,被修饰的方法不能被重写,被修饰的变量不能再被修改。因此同一个类不能既被abstract声明,又被final声明

finally是在异常处理时提供finally块来执行任何清除操作。简单理解就是不管程序执行时是否抛出异常,在finally里的代码都将被执行。

finalize是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。

int 和 Integer 有什么区别?

Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。

int只是普通的基本数据类型。

基本数据类型:boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

重载和重写的区别?

方法重写(overriding):

  1、也叫子类的方法覆盖父类的方法,要求返回值、方法名和参数都相同。

  2、子类抛出的异常不能超过父类相应方法抛出的异常。(子类异常不能超出父类异常)

  3、子类方法的的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)

方法重载(overloading):

重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数,可以参考API帮助文档看看类的构造方法

抽象类和接口有什么区别?

接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

抽象类可以有普通成员变量,接口不行;

抽象类有非抽象的方法和构造方法,并且修饰符可以是私有的,接口只能是抽象的方法,并且修饰符是public,最后说一句只能继承一个抽象类,但能实现多个接口。

说说反射的用途及实现?

反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许对其内部成员进行操作。反射机制提供的功能主要有:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法

①、在运行时判断任意一个对象所属的类
②、在运行时构造任意一个类的对象
③、在运行时判断任意一个类所具有的成员变量和方法(通过反射设置可以调用 private)
④、在运行时调用任意一个对象的方法

说说自定义注解的场景及实现?

  1. 类属性自动赋值。
  2. 验证对象属性完整性。
  3. 代替配置文件功能,像spring基于注解的配置。
  4. 可以生成文档,像java代码注释中的@see,@param等

实现:定义一个自定义注解(使用元注解,每个元注解都是可选,非必选):

@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target({ElementType.FIELD,ElementType.METHOD})
public @interface MyAnnotation1{
    public String name() default "hello";
}

定义一个自定义注解(不使用元注解):

public @interface MyAnnotation{}

HTTP 请求的 GET 与 POST 方式的区别?

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

GET和POST还有一个重大区别,简单的说:

GET产生一个TCP数据包;

POST产生两个TCP数据包。

长的说:

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

session 与 cookie 区别?

Cookie:

  • Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案。
  • Cookie的主要内容包括:名字,值,过期时间,路径和域。使用Fiddler抓包就可以看见,比方说我们打开百度的某个网站可以看到Headers包括Cookie

session:

  • 存在服务器的一种用来存放用户数据的类HashTable结构。
  • 浏览器第一次发送请求时,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。 
    • 一般这个值会有个时间限制,超时后毁掉这个值,默认30分钟。
  • 当用户在应用程序的 Web页间跳转时,存储在 Session 对象中的变量不会丢失而是在整个用户会话中一直存在下去。
  • Session的实现方式和Cookie有一定关系。建立一个连接就生成一个session id,打开几个页面就好几个了,这里就用到了Cookie,把session id存在Cookie中,每次访问的时候将Session id带过去就可以识别了

区别

  • 存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
  • 一个在客户端一个在服务端。因Cookie在客户端所以可以编辑伪造,不是十分安全。
  • Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没问题。
  • 域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。

session 分布式处理?

  1. session黏性。就是说,用户在访问了某台服务器后,之后的操作就让其只走该服务器就好。那么久可以让用户只访问该台机器了。

优点:操作简单,不用对session做任何操作 
缺点:当一台机器挂掉后,流量切向其他的机器。会丢失部分用户的session 
适用场景:发生故障对客户产生的影响较小;服务器发生故障是低概率事件。

2.使用广播的方式 
当一台服务器中的session中(增删改)了之后,将这个session中的所有数据,通过广播一样的方式,同步到其他的服务器中去。 
优点:容错性增高 
缺点:机器不能太多,session数量不能太大,否则会造成网络阻塞,是服务器变慢。

3.使用中间件共享session 
使用redis或者Memcached去当做有个中间件,session中的数据存放在其中。这里需要的是redis或者Memcached必须是集群。 
两种做法: 
(1)黏性:说白了就是,和第一种方式一样,一个用户的请求只走一个服务器并且在拿session数据的时候,都只在该台服务器上,但是用户的session需要保存在redis上,作为备份(容灾用)。当一台服务器挂掉了,那么就可以将该用户的session复制到其他的机器上并且把流量转发。 
(2)非黏性:这种情况下,就是将用户的session存放在redis上,用户在访问的时候,读取修改都在redis上 
目前这种做法是大家使用最多的方法

4.session数据存放数据库中 
这种方法的优缺点大家都知道的。 
优点:数据可以持久化,服务器挂掉了也没关系。 
缺点:慢慢慢!!!而且用户过多的时候,性能低下。

JDBC 流程?

1)加载驱动程序。

2)建立连接。

3)创建语句。

4)执行语句。

5)处理ResultSet。

MVC 设计思想?

MVC应用程序总是由三个部分组成.Event(事件)导致Controller改变Model或View,或者同时改变两者.只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新.类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己 。

  MVC模式是一个复杂的架构模式,其实现也显得非常复杂,但多种设计模式结合在一起,使MVC模式的实现变得相对简单易行.Views可以看作一棵树,显然可以用Composite Pattern来实现.Views和Models之间的关系可以用Observer Pattern体现.Controller控制Views的显示,可以用Strategy Pattern实现.Model通常是一个调停者,可采用Mediator Pattern来实现.

equals 与 == 的区别?

“==” 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致。

如果两个对象的引用相同时(指向同一对象时),“==”操作符返回true,否则返回flase。

equals()方法存在于Object类中,因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层依赖的是==号,那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值

猜你喜欢

转载自blog.csdn.net/u013783065/article/details/82623449
今日推荐