Java的反射机制
什么是反射机制简单来说,反射机制就是程序在运行时能获取到自身的信息。在Java中,只要给定类的名字,那么就能通过反射机制来获得类的所有信息 Java反射机制的作用 在运行时判断任意一个对象所属的类 在运行时判断任意一个类所具有的成员变量和方法 在运行时任意调用一个对象的方法 在运行时构造任意一个类的对象 反射机制的优缺点优点: 静态编译:在编译时即确定类型,绑定对象,即通过 动态编译:运行时确定类型,绑定对象。动态编译最大限度的发挥了Java的灵活性,体现了多态的应用,有利于降低类之间的耦合性 缺点:对性能有一定影响,使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行相同的操作。
Java的四大基本特性
Java的四个基本特性:抽象、封装、继承、多态 抽象指将一类对象的共同特征总结出来构造类的过程,主要包括数据抽象和行为抽象两个方面,分别对应于类的属性和方法,抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 封装封装就是将类的某些属性隐藏起来,然后通过接口对外开放,但是在外部不能直接进行查找属性。 封装有以下几个优点: 便于使用者正确、方便的使用系统,防止使用者错误修改系统属性 有助于建立各个系统间的松耦合关系 提高了软件的可重用性 降低了大型系统的风险,即使整个系统不成功,个别独立的子系统可能还有价值 继承子类继承父类的非private属性和方法 子类除了拥有从父类继承过来的属性和方法外,子类还可以有自己的属性和方法 java中只支持单一继承,也就是一个子类只能有一个父类,但是一个父类可以有多个子类 继承的作用提高吗的重用性。一个源文件中可以包含多个类,但是只能有一个类带public,而且带public访问修饰符的类的类名要和源文件的文件名相同,main方法也要写在带public的类中。 当创建子类对象时,一定会先执行父类的构造方法创建父类对象,然后在调用...
Mysql索引
索引的目的是什么 快速访问表中的特定信息,提高检索速度 创建唯一性索引,保证数据库表中每一行数据的唯一性 加速表与表之间的连接 使用分组和排序字句进行数据检索时,可以显著减少查询分组和排序的时间 索引队数据库系统的负面影响 创建和维护索引需要耗费时间,这个时间随着数据量的增加而增加 索引需要占用物理空间,不光是表需要占用数据空间,每个索引也都需要占用物理空间。 当对表进行增删改的时候索引也需要动态维护,这就降低了数据的维护速度 为数据表简历索引的原则 在最频繁使用的、用以缩小查询范围的字段上建立索引 在频繁使用的、需要排序的字段上建立索引 什么情况下不宜建立索引 查询中很少涉及的列或者是重复值比较多的列 对于一些特殊的数据类型,比如text等 数据库索引中为什么使用B+树而不是其他的树形结构因为B树不管是叶子节点还是非叶子节点,都会保存数据,导致在非叶子节点中能保存的指针数量变少。 指针少的情况下要保存大量的数据,只能增加树的高度,导致IO操作变多,查询性能变低。
Mysql事务的隔离级别
Mysql中InnoDB支持四种事务隔离级别 read uncommited:读到未提交数据 read committed:不可重复读 repeatable read:可重读、读提交 serializable:串行事务 mysql默认设置的隔离级别是repeatable read(可重复读) 读未提交MYSQL事务隔离是依靠锁来实现的,而未读提交是不加锁的,所以性能是最好的。 任何事务队数据的修改都会第一时间暴露给其他的事务,即使事务还没有提交。 读未提交,其实就是可以读到其他事务未提交的数据,但没有保证你读到的数据最终一定是提交之后的数据,如果中间发生回滚,那就回出现脏数据的问题。 可重读可重读指的是在一个事务内,最开始读到了数据和事务结束前的任意时刻读到的同一批数据都是一致的。也就是事务不会读到其他事务对已有数据的修改,即使其他事务已经提交。但是,对于其他事务新插入的数据时可以读到的,这也就引发了幻读的问题。 不可重复读对比可重复读,不可重复读指的是在同一事务内,不同的时刻读到的同一数据可能是不一样的,可能会受到其他事务的影响,比如其他事务改了这批数据并提交了。也就一...
北京风行面试记录
北京风行技术面面试记录 Android四大组件是什么 Activity的生命周期 Activity的四种启动模式 Service的两种启动方式以及他们的区别 除了原生Android使用Java开发还有没有了解过Android的其他开发方式 StringBuffer和StringBuilder的区别 Android开发中有没有使用到什么第三方库 什么是线程安全,用什么关键字可以保证线程安全 讲一下Android的事件分发机制 讲一下Java的垃圾回收机制 Android中View的绘制过程 有没有了解过Android Framework
Activity、Service和Fragment的生命周期
Activity的生命周期Activity实例是由系统自动创建,并在不同的状态期间回调相应的方法。一个最简单的完整的Activity生命周期会按照如下顺序回调:onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy。 如下图所示: 未完成,施工中
Activity的四种启动模式
Activity的启动模式可以在AndroidManifest.xml中,通过android:launchMode或者在Intent的Flag来设置实现。 standard模式 特点:Activity的默认启动模式 每启动一个Activity就会在栈顶创建一个新的实例 缺点:当Activity已经位于栈顶时,再次启动Activity时还需要创建一个新的实例,不能直接复用。 singleTop(栈顶复用)模式 特点:该模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶则直接复用,调用其onNewIntent()方法,否则创建新的实例。 缺点:如果Activity并未处于栈顶位置,则还是可能会创建多个实例。 singleTask(栈内复用)模式 特点:Activity只会在任务栈里存在一个实例。如果要激活的Activity在任务栈里已经存在,就不会创建新的Activity,而是直接复用这个已经存在的Activity,调用其onNewIntent()方法,并且清空这个Activity任务栈上的所有Activity。 singleInstance(单一实例)模...
Android的事件分发机制
当一个或多个手指触摸屏幕时,通常有四种类型的事件: ACTION_DOWN:按下屏幕时发生,表示触摸事件开始,他是第一个发生的事件 ACTION_UP:手指抬起,表示触摸事件结束 ACTION_MOVE:手指按下屏幕,并且手指移动的距离超过了某个阈值 ACTION_CANCLE:事件已取消(不是由于用户的行为引起) 这些信息都被包含在MotionEvent中,ACTION_DOWN和ACTION_UP只有一个,而ACTION_MOVE可能存在多个,所谓的事件分发就是队MotionEvent事件分发的过程,就是找到一个能处理MotionEvent的View,过程由Activity开始,传到ViewGroup,最终再传到View,响应过程从上到下,从子到父。 当我们点击一个按钮时,这个按钮可能被包含在ViewGroup中,事件会先从Activity中开始分发进行,如果Activity要自己处理,那么这个按钮就得不到事件信息,如果Activity是进行分发,那么接下来包裹这个按钮的ViewGroup就会得到处理,同样如果这个ViewGroup要进行拦截,那么这个按钮也得不到响应...
Java基础:接口和抽象类的区别
1、基本语法区别Java中接口和抽象类的定义语法分别为interface和abstract关键字 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点有: 抽象类不能被实例化,只能被继承 包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法 抽象类中的抽象方法的修饰符只能为public或者protected,默认为public 一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类 抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要作用是被子类调用 接口:Java中接口使用interface关键字修饰,特点为: 接口可以包含变量、方法,变量被隐式指定为public static final,方法被隐式指定为public abstract 接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承为题 一个类可以实现多个接口 JDK1.8中对接口增加了新的特性: 默认方法:JDK1.8允...
HTTP1、2、3
HTTP/1.1 HTTP的工作流程 浏览器与服务器建立TCP连接,即三次握手 TCP连接成功,浏览器发送HTTP请求命令 服务器接收到请求并返回HTTP响应 服务器关闭连接,即四次挥手 浏览器解析请求的资源 Connection:keep-alive可以让TCP连接保持打开,浏览器可继续通过相同的连接发送请求。HTTP1.1所有的请求都是默认保持持续连接的 缺陷 高延迟,队头阻塞,贷款无法充分利用 队头阻塞是指当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也都会被阻塞,会导致客户端迟迟收不到数据。 无状态特性带来的巨大的头部 携带过多的header信息,如user-agent,cookie,accept等 请求报文有过多的重复字段,浪费资源 明文传输的不安全性 不支持服务推送 HTTP/2SPDY协议HTTP/2是HTTP/1.x的代替,但不是重写,HTTP方法/状态码/语义都和HTTP/1.x一样。HTTP/2基于SPDY,专注于性能。 二进制传输HTTP/2将请求和响应数据分割为更小的帧,并且采用的是二进制编码它把TCP协议的部...
