岗位(java开发工程师提前批)
时间:7.14上午11.30
接触过go语言吗?
反射和反射的主要作用?
反射的功能主要有:得到一个对象所属的类;获取一个类的所有成员的变量和方法,在运行时创建对象;在运行时调用对象的方法。
总共有三种class类:
Class.forName(’类的路径‘)
别名.Class
实例.getClass()
‘+’号的底层实现?
拷贝的具体实现方法?
面向对象三要素的实现跟具体应用
(1)继承
通过继承,子类可以使用父类的一些方法成员变量和方法,从而提高代码的复用性,提高开发效率,在java语言中被继承的类叫做基类或者父类,继承基类或者父类的类叫派生类或者子类。继承是通过extends关键字来实现的。
继承主要有几个特性:
①java语言不支持多重继承
②子类只能继承父类的非私有的成员变量和方法
③当子类和父类的方法或者成员重名时,不会继承而是会覆盖。
(2)多态
多态表示同一个操作应用于不同对象的时候,会有不同的语义,例如,同样是执行“+”操作时,“3+4”用整数来实现与“3”+“4”进行字符串连接的时候是不同的。
多态有两种表现形式:
方法的重载
方法的覆盖
(3)重载
重载是一个类中多态性的一种表现,是指一个类中定义了多个同名的方法,他们或有不同的参数个数和参数类型,对于不同的输入有不同的效果。
怎样读取任意位置的文件
API解读
java可以使用RandomAccessFile通过文件指针定位读写位置(默认为文件开始处即seek(0)),RandomAccessFile对象本地方法seek来设置文件开始位置(以字节为单位),然后可以通过本地方法getFilePointer()定位当前支持的位置,如下
public native void seek(long pos) throws IOException;//设置文件位置
public native long getFilePointer() throws IOException;//读取文件位置
RandomAccessFile类有两个构成方法,如下
/**
*构造读写文件流实例
public void testRead(){
RandomAccessFile raf=new RandomAccessFile("c:/test1.txt","r");
raf.seek(0);//设置读取开始位置,字节为单位
System.out.println((char)raf.read());//从开始位置向后读取第一个字节,并转换为字符打印
System.out.println((char)raf.read());//从开始位置向后读取第二个字节
raf.close();
}
写操作
publc void testWrite(){
RandomAccessFile raf=new RandomAccessFile("c:/test2.txt","rw");
raf.seek(rf.lenght());//从指定文件末尾开始写入
raf.writeByte( 1 );//在文件"test2.txt"末尾写入1
raf.writeUTF("一");//在后面再写入中文"一"
raf.close();
}
总结:
public class RandomAccessFile implements DataOutput, DataInput, Closeable {...}
RandomAccessFile同时实现了DataOutput和DataInput接口,因此它定义用来读写文件,是一种特殊的文件流。
项目的介绍
Spring 中Bean的生命周期?
spring的生命周期
spring生命周期中的阶段,包括初始化、使用、销毁。
1、初始化阶段
1)调用bean的构造函数,创建实例;
2)进行参数依赖注入;
3)若实现org.springframework.beans.BeanNameAware接口,则调用BeanNameAware的setBeanName()方法;
4)若实现org.springframework.beans.factory.BeanClassLoaderAware接口,则调用BeanClassLoaderAware的setBeanClassLoader()方法;
5)若实现org.springframework.context.ApplicationContextAware接口,则调用ApplicationContextAware的setApplicationContext()方法;
6)若使用了注解@PostConstruct,则调相应方法;
7)若实现org.springframework.beans.factory.InitializingBean接口,则调用InitializingBean接口的afterPropertiesSet方法;
8)若bean定义的使用了initMethod,则调相应方法;
9)若实现org.springframework.beans.factory.config.BeanPostProcessor接口,则调用BeanPostProcessor的postProcessBeforeInitialization()方法和postProcessAfterInitialization方法;
2、使用阶段
1)bean在项目的使用;
3、销毁阶段
1)若使用注解@PreDestroy,则调用相应方法;
2)若bean定义中配置了destroyMethod,则调用相应方法;
3)若实现org.springframework.beans.factory.DisposableBean接口,则调用DisposableBean接口的destroy方法;
单点登录的实现方法
单点登录的实现方案,一般就包含:Cookies,Session同步,分布式Session方式,目前的大型网站都是采用分布式Session的方式。我先从cookie的实现谈起,你就能很清楚的知道为什么需要分布式session方式实现单点登录。
1.基于Cookie的单点登录
最简单的单点登录实现方式,是使用cookie作为媒介,存放用户凭证。 用户登录父应用之后,应用返回一个加密的cookie,当用户访问子应用的时候,携带上这个cookie,授权应用解密cookie并进行校验,校验通过则登录当前用户。
不难发现以上方式把信任存储在客户端的Cookie中,这种方式很容易令人质疑:
Cookie不安全
不能跨域实现免登
对于第一个问题,通过加密Cookie可以保证安全性,当然这是在源代码不泄露的前提下。如果Cookie的加密算法泄露,攻击者通过伪造Cookie则可以伪造特定用户身份,这是很危险的。 对于第二个问题,不能跨域实现免登更是硬伤。所以,才有了以下的分布式session方案。
2.分布式session方式实现单点登录
例如阿里有很多系统分割为多个子系统,独立部署后,不可避免的会遇到会话管理的问题,类似这样的电商网站一般采用分布式Session实现。
再进一步可以根据分布式Session,建立完善的单点登录或账户管理系统。
阿里P8架构师谈:单点登录的原理、来源、实现、以及技术方案比较
流程运行:
(1) 用户第一次登录时,将会话信息(用户Id和用户信息),比如以用户Id为Key,写入分布式Session;
(2) 用户再次登录时,获取分布式Session,是否有会话信息,如果没有则调到登录页;
(3) 一般采用Cache中间件实现,建议使用Redis,因此它有持久化功能,方便分布式Session宕机后,可以从持久化存储中加载会话信息;
(4) 存入会话时,可以设置会话保持的时间,比如15分钟,超过后自动超时;
结合Cache中间件,实现的分布式Session,可以很好的模拟Session会话
spring security
一个能够为基于Spring的企业应用系统提供声明式的安全訪问控制解决方式的安全框架(简单说是对访问权限进行控制嘛),应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。 spring security的主要核心功能为 认证和授权,所有的架构也是基于这两个核心功能去实现的。
聊聊他们的技术栈:利用go语言做mysql插件开发。
问问如果我接触一项新知识该怎样去学习
整体总结:问题比较简单,但我回答的差强人意,问题没法深入去聊,只知道个表象,感觉就是随意聊一聊,20分钟就结束了,挂的可能性比较大。