一步两个脚印 ---面试笔试那些事儿

记笔试面试那些事儿

Use 'Ctrl+F' to find your aim


1. CoreJava

1.1 BasicJava

JVM特性

  • 平台无关性. Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

JVM内存分配

  1. 基本数据类型、变量和对象的引用都是在栈分配的
  2. 堆内存存放由new创建的对象与集合
  3. 类变量(static修饰的变量):程序在一加载的时候就在堆中为类变量分配内存,堆中的内存地址存放在栈中
  4. 实例变量:当你使用java关键字new的时候,系统在堆中开辟并不一定是连续的空间分配给变量,是根据零散的堆内存地址,通过哈希算法换算为一长串数字以表征这个变量在堆中的”物理位置”,实例变量的生命周期 — 当实例变量的引用丢失后,将被GC(垃圾回收器)列入可回收“名单”中,但并不是马上就释放堆中内存。
  5. 局部变量:声明在方法里或代码块里,执行到它的时候,就在内存中开辟内存,一旦局部变量脱离作用域,该内存会立即释放

多态

允许不同对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。
主要有以下优点:
- 可替换性:多态对已存在代码具有可替换性
- 可扩充性:增加新的子类不影响已存在的类结构
- 接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现
- 灵活性
- 简化性
怎么实现多态:

  • 接口实现
  • 继承父类、重写方法
  • 同一类中进行方法重载

PS:虚拟机是如何实现多态的:
动态绑定技术(dynamic binding),执行期间判断所引用对象的实际类型,根据实际类型调用对应的方法。

基本数据类型

类型位数字节数
boolean
byte18
char216
short216
int432
long864
float432
double864

Java中创建对象的几种方式

  1. 采用new
  2. 通过反射
  3. 采用clone
  4. 通过序列化

接口和抽象类的区别!!!

比较抽象类接口
默认方法有默认的方法实现java8之前,接口中不存在方法的实现
实现方法如果子类不是抽象类,需要通过抽象父类中所声明方法的实现用implements来实现接口,需要提供接口所声明的实现
构造器没有
修饰符四种都可以默认为public,其它不能
多继承一个子类只存在一个父类一个子类可以存在多个接口
添加新方法向抽象类中添加新方法,可以提供默认的实现,因此可以不修改子类现有的方法往接口中添加新方法,则子类中需要实现该方法
其它抽象类当然是类啦接口,顾名思义…

Object中有哪些公共方法

  1. equals()
  2. clone()
  3. getClass()
  4. notify(),notifyAll(),wait()
  5. toString

java中 ==equals()的区别

  • == :为运算符,用于比较两个变量是否相等
  • equals:是Object类的方法,用于比较两个对象是否相等
  • 换句话说:基本类型比较用 ==,比较的是他们的值。默认下,对象用 == 比较时,比较的是内存地址,如果需要比较对象内容,需要重写equal方法。

& 和 &&的区别

  • &是位运算符,不具备短路功能;&&是逻辑运算符,具备短路功能

final, finalize, finally

  • final:修饰符,可以修饰变量、方法和类
  • finalize: 方法,在对象被回收之前调用的方法,给对象自己一次复活的机会,但何时调用finalize方法没有保证
  • finally:关键字,常与try-catch搭配使用(try-finally也行),用于异常的处理,finally块中代码一定会执行,不论try块还是catch块执行

final的用法

上文 提到了final,下面列述其用法:

  1. 被final修饰的类,不可以被继承
  2. 被fianl修饰的方法,不可以被重写
  3. 被final修饰的变量,不可以被改变
  4. 被final修饰的引用,引用不可变,引用指向的内容可变
  5. 被final修饰的常量,在编译阶段会存入常量池中(那static修饰的常量放哪里呢?)
  6. 被final修饰的方法,JVM会尝试将其内联,以提高运行效率
1.2 AdvanceJava

HashMap与HashTable的区别

  1. HashMap:
    ①键和值可以为空
    ②HashMap的方法不能同步
    ③HashMap会重新计算hashcode
  2. HashTable:
    ①键非空唯一,值非空
    ② HashTable的方法是同步的
    ③HashTable使用对象的hashcode

ArrayList与LinkedList的区别

  1. ArrayList:
    ①数组
    ②查询快于LinkedList,存取慢于LinkedList
    ③支持随机访问
  2. LinkedList:
    ①双向链表
    ②由于链表结构,存取(插入删除)快,查询慢
    ③不支持随机访问
  • PS:倘若使用下标访问一个元素,ArrayList的时间复杂度是O(1),LinkedList是O(n).
1.3 Java8

lambda表达式

基本结构:() -> {}
作用:匿名内部类的简化版,是函数式接口
就举几个栗子吧:

  • list.sort((o1, o2) -> {o1 - 02});
  • map.entrySet().forEach(System.out::println);
  • map.forEach((k,v)->System.out.println(k+" : "+v));

Comparator和Comparable的区别

  • Comparable 接口用于定义对象的自然顺序,而 comparator 通常用于定义用户定制的顺序。Comparable 总是只有一个,但是可以有多个 comparator 来定义对象的顺序。


2. Spring

2.1 Spring

Spring框架的设计模式

  1. 工厂设计模式
    BeanFactory与ApplicationContext创建bean对象
  2. 代理设计模式
    SpringAOP功能的实现
  3. 单例设计模式
    Spring中的bean默认都是单例的
  4. 包装器设计模式
    可以选择连接多个数据库
  5. 观察者模式
    Spring事件驱动模型
  6. 适配器模式
    SpringAOP的增强或通知(Advice)
    SpringMVC用到了适配器配置Controller
  7. 模板方法模式
    以Template结尾的对数据库操作的类
  8. … …

Spring中的bean生命周期

  1. Bean容器找到配置文件中Spring Bean的定义。
  2. Bean容器利用Java Reflection API创建一个Bean的实例。
  3. 如果涉及到一些属性值,利用set()方法设置一些属性值。
  4. 如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。
  5. 如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。
  6. 如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例。
  7. 与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。
  8. 如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()方法。
  9. 如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法。
  10. 如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。
  11. 如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization()方法。
  12. 当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy()方法。
  13. 当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。

单例Bean的作用域

 单例(singleton)
 原型(prototype)
 请求(request)
 会话(session)
 全局(global-session)
2.2 SpringMVC

SpringMVC的流程

  1. 请求者发送request请求,DispatcherServlet处理请求,并向HandlerMapping请求解析查找handler
  2. HandlerMapping返回一个执行链(Interceptor):preHandle/postHandle/afterHandle
  3. DispatcherServlet请求适配器执行Handler
  4. HandlerAdapter将handler交给Handler/Controller去执行
  5. Controller返回一个ModelAndView对象(Model是返回的数据对象,View是逻辑上的View)
  6. ViewResolver会根据逻辑View去查找实际的View
  7. DispatcherServlet把返回的Model传给View(视图渲染)
  8. 把View返回给请求者

Spring中的MVC模式基本概念

Java Bean/Dao(Model)+JSP(View)+Servlet(Controller)

  • Service层(处理业务/逻辑)
  • Dao层(数据库操作)
  • Entity层(实体类)
  • Controller层(控制层)
2.3 Spring注解
  • @Autowired注解的作用
    自动扫描该注解下的类,将其自动装配,其作用是代替getter/setter方法与bean属性中的property
  • @Qualifier
    用于多个实现类(接口)的装配
  • @Resource
    @Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配。
    指定了name或者type则根据指定的类型去匹配bean。
    指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都会报错。
  • @Service
  1. 声明某个类是一个bean,才能使用@Autowired将其作为成员变量自动注入
  2. 省略了.xml中的配置bean操作
  3. 其在类中的id为类名首字母小写
  • @Scope(“prototype”)
    Spring默认产生的bean是单例的,如果不想使用单例,xml文件里面可以在bean里面配置scope属性。
    注解也一样,配置@Scope即可,默认是"singleton"即单例,"prototype"表示原型即每次都会new一个新的出来。
  • @Component@Bean的区别
  1. @Component作用于类、@Bean作用于方法
  2. @Component定义要扫描的路径,会自动侦测以及自动装配到Spring容器中、@Bean标有该注解的方法中产生这个bean
  3. @Bean比@Component自定义性更强

3. Another

3.1 XML

解析XML的方法
DOM、SAX、PULL

  • DOM: 消耗内存:先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据。这个写起来很简单,但是很消耗内存。要是数据过大,手机不够牛逼,可能手机直接死机
  • SAX: 解析效率高,占用内存少,基于事件驱动的:更加简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
  • PULL: 与 SAX 类似,也是基于事件驱动,我们可以调用它的next()方法,来获取下一个解析事件(就是开始文档,结束文档,开始标签,结束标签),当处于某个元素时可以调用XmlPullParser的getAttributte()方法来获取属性的值,也可调用它的nextText()获取本节点的值。

  • 2019/11/28 😐 😛 |第一次发布文章|
  • 2019/12/02 😄 😮 |更新了CoreJava部分,添加了Another主标签块|
  • 2019/12/03 |更新了CoreJava部分|
  • 2020/01/01 |停止更新|
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值