面试小总结

来源:互联网 发布:清华斯维尔软件下载 编辑:程序博客网 时间:2024/05/18 15:29
String s1=new String("abc")
创建了两个对象 分别在堆和常量池


内存:
栈 :变量、对象引用,方法运行区
堆: 创建的对象,类,常量池


多态,就是父类的引用指向了子类的实例,运行时注入的是哪个就是哪个


基本类型的传递是值传递,是一个值的附件,不能更改原值
对象引用 是传递了一个指向内存地址的引用,通过这个引用可以改变这个内存地址上的内容
String   传递了一个指向内存地址的引用,然后这个引用指向了另外一个常量,所以之前的值不变


对象加载顺序
从父到子 静态先行 静态代码 只此一次
父静态>子静态>父普通代码块>父构造函数>子普通代码块>子构造函数


集合 
1 ArrayList LinkedList Vetty的关系
Vector是线程安全的,速度慢
LinkedList和ArrayList是线程不安全的,速度快


可以使用


Vector和ArrayList都是Object数组结构,是有序不排重的,查询可按照序号索引,但是插入设计到数组元素移动
LinkedList是双向链表,是node <T>,查询需要向前向后遍历移动指针,而插入只要改变前后连接关系就行


默认初始容量是16,负载英子是0.75,也就是数组到了12就扩容一倍


HashSet底层是HashMap, 它实际上是使用了HashMap的key来装所有的元素
HashMap底层是数组加链表:首先比较key的HashCode,如果相同,再比较equels 
数组中装的是entry


保证线程安全可以使用currentHashMap




线程:对象锁,类锁
新建(new) --> 就绪(start)-->运行(获得cpu)-->
                  |
阻塞(放弃cpu:包括sleep join(不放锁等待然后记录了就绪),wait(放弃锁进入等待池,然后通过notify到然后得到锁到就绪))


jdbc
加载驱动 获得连接 创建statement 执行语句 处理结果 关闭资源


数据库事务:隔离级别
transtion
savePoint
rollback
commit


redis有部分事务
语法错误支持事务
运行错误不支持事务
watch监视Key在事务之前版本有没有发生变化


反射:
获得类对象
Teacher.class
new Teacher().getClass()
Class.forName("Teacher")
通过类对象创建对象
class.newInstance()创建对象


public class Singleton{
private SingleTon();
        private static SingleTon instance=null;
public static syncronisid SingleTon getInstante(){
if(instante==null)
instance=new SingleTon;
                return instance;
}
}
servlet web容器启动加载 init
        请求调用        service()
        服务器关闭      destroy


jsp内置对象,request,response,out,page,session,pageContext,application,
自定义标签,写一个思想tag接口的类
写一个tld文件描述
在jsp中引入tld文件
jsp静态包含和动态包含
指令<%@ include %>   编译时包含
标签<jsp:include >   运行时包含




框架
Spring
bean的生命周期
----------容器启动-------------------
bean的构造函数
bean的set函数
实现beanNameAware注入BeanName
实现BeanFactoryAware注入setBeanFactory
调用BeanProseer的postPoroseBeforeInit
实现InitBean的调用postAfterProperSet()
调用init()
调用BeanProse的postProceAfterInit
----------销毁容器------------
实现DisposabeBean的destory
执行desrtroy方法


对象的创建方式
    1 构造函数  
         <bean name="user" class="com.bless.springdemo.vo.User"></bean> 
    2 静态工厂   
         <bean name="staticFactoryDao" class="com.bless.springdemo.factory.DaoFactory" factory-method="getStaticFactoryDaoImpl"></bean> 
    3 实例工厂   
         <bean name="daoFactory" class="com.bless.springdemo.factory.DaoFactory"></bean> 
         <bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl"></bean> 


对象属性的注入方式
    1 构造函数
      <!--(2)创建构造器注入,如果主类有带参的构造方法则需添加此配置--> 
         <constructor-arg ref="springDao"></constructor-arg> 
    2 Setter方法
         <property name="springDao" ref="springDao"></property> 




AOP 动态代理  jdk的接口代理,cglib的继承代理




SpringMvc
 dispacherServlet找handMapping映射器处理器 得到handler和intecepter
 dispacherServlet找handleAdeptaer处理执行这个handler和intecepter得到modelAndView
 dispacherServlet找ViewReslvor视图解析器从modelanview中得到相应的view视图对象(将模型数据填充到视图中)
 dispacherServlet将model和view进行渲染的到的页面通过response响应给用户


中文乱码 可以通过配置spring的caractorEncodingFilter过滤器


myBatis
  是将jdbc操作数据库的过程进行封装,开发者不用关心注册驱动,获得连接,创建statement,处理结果集,释放连接的过程
只需要关注sql本身
  两个配置文件,Mybatis配置文件创建回话工厂,sessionFactory
  mapper.xml中的每一条sql对应一个statement对象


数据库
  mysql执行顺序
  from a join on 
  where 非select别名
  group By 
  having 
  select 
  order by 
  limit   


  索引,排序+检索
  主键索引,普通索引,唯一索引,联合索引(最左前缀)
  
  索引Hash和Btree类型
  hash只能等号查询,不能范围查询,类似于HashCode()方法比较
  btree有三层,需要发生3次IO,叶子节点装真实的数据,所以值越分散,重复率越低,索引效果越好
  
  explain:
  id 越大,越上越先执行
  select_type 针对普通查询,子查询,聚合查询
  type system>const>eq_ref(一条)>ref(多条)>range(范围索引)>index(全局索引)>all(全表扫描)
  possibleKey
  key 
  key_len 越大越好
  rows 越小越好
  extra Using filesort(和索引不一样的排序) Using Temporary(排序使用了临时表) 
  using index(覆盖索引,要找的和索引相匹配,都不用查真正的表)


  注意:
  select * 取消了覆盖索引
  联合索引没有用到第一个索引,或者中间的索引用到了>或者< 
  索引列上做任何操作,计算函数or  <> != is null is not null 
  字符串 %加载前面 或者不加单引号


linux
  源码安装(之前要gcc编译) tar  解压缩-》进入解压缩目录--》编译安装指定安装位置config -prefix -->make-->make install-->启动
  rpm编译后的二进制包 rpm -ivh  rpm -list rpm -qa rpm -e
  yum etc/yum.repos.d/下面配置yum源,可以自动查找依赖,yum install 
  绝对路径执行可执行文件,service启动 (前提/etc/rc.d/init.d下面有这个执行命令)


  top 
  ps -ef|grep http
  ps aux|grep pid


  Jdk 解压,更改而配置文件 etc/profile文件  
 


redis
  5种 String list set hash zSet(在set上加了一个sort值)
  C强一致性 A 高可用性 P 分布式容忍性


  redis-server
  redis-cli
  
  rdb:默认开启,有规则的存储内存中的快照,保存domp.rdb文件,也可以手工保存save,恢复,对应目录下启动redis
  aof:默认关闭,每一秒存储写操作命令,redis-check-aof --fix修复,AOF重写:配置重写的大小是上次rewrite大小的一倍且文件大于5-8G
  aof优先加载,rdb作为备份


  事务:一个队列中,有顺序,一次性,排他性执行
  muiti 开启,入队
  exec  执行 (编译错误回滚,运行错误到错误点结束)
  discard 回滚所有命令
  watch  监视  乐观锁,cas CheckAndSet


  发布订阅:pub sub 
  
  主从复制,读写分离:replication info 
            master/slave
  配置文件中replication 模块中的slave of ip port 
  命令                          slave of ip port
  
  新货相传 
  反客为主  slave of no one  在薪火相传的基础上,主机挂了,进行反客为主,然后更改程序里面的指向
  哨兵模式  反客为主的自动版,
            1 新建sentinel.conf 文件,配置哨兵监视 sentinel monitor ip port 1
            2 启动哨兵  ./sentinel.conf
            3 在主机挂了的情况下,哨兵自动将投票高的变成主机
  



































































原创粉丝点击