Java相关知识摘录

1. 数据库问题

  1. 存储过程:预编译的sql语句,优点就是执行的效率高,一定程度上确保数据安全
  2. 索引:加快检索表数据的方法,帮助mysql高效获取数据的数据结构。常用的MySQL数据库几种基本的索引类型为普通索引,唯一索引,全文索引,主键索引,组合索引。
    A. 索引可加快检索速度
    B. 降低了插入,删除等维护任务的速度
    C. 可以在查询过程中使用优化隐藏器,提高系统的性能
    D. 同时索引需要占用物理和数据空间
  3. 事务:事务是数据库维护数据一致性的单位。
    A. 原子性
    B. 隔离性
    C. 一致性
    D. 持久性
  4. 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
  5. 乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
  6. 删除的3个“词”:drop,delete,truncate。
    A. Drop:删除一张表
    B. Delete:删除部分数据行,+where条件
    C. Truncate:删除表但是保留了所有数据
  7. 触发器:特殊的存储过程。通过事件来触发被执行。
  8. 使用check,主键,外键,非空来约束,可提交效率,并相对触发器更加的方便。
  9. Varchar 跟char的区别:varchar适合字符长度经常变化的,char适合字符长度固定。
  10. 连接池的作用
    A. 维护一定数量的连接,减少连接的时间。
    B. 统一管理
    C. 更快的响应时间
  11. Sql的几种连接方式
    A. 内连接 inner join/join select a. ,b form a,b where a.id = b.pid; 或 select a.* ,b* form a inner join b on a.id = b.pid;
    B. 左连接 left join select a.,b. from a left join b on a.id=b.pid ;
    (左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值)
    C. 右连接 right join select a.,b. from a right join b on a.id=b.pid;
    (右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值)
    D. 全连接 full join
    E. 笛卡尔乘积 cross join**
  12. 关系型数据库跟菲关系型数据库(从关系型数据库角度)
    A. 事务的一致性
    B. 支持sql,可用于复杂的查询
    C. 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
    D. 相对容易理解
    E. 但不支持高并发读写需求
    F. 不支持大量数据时的高效率读写
    G. 读写性能比较差,而非关系型数据库一般键值对存储数据

2. Java面向对象等基础问题
1) 面向对象的特性:继承,封装,多态
2) 面向对象与面向过程:
A. 面向过程:
在这里插入图片描述
B. 面向对象:
在这里插入图片描述
3) 抽象类与接口:

  • 抽象类只能单继承,但是接口可以同时继承多个父接口
  • 抽象类中可以没有抽象方法,接口则一定要有

4) 常用的包举例:lang、util、io、net、sql、awt、swing
5) Exception与error 的区别:exception用于用户程序可以捕获的异常情况;error 定义了不期望被用户程序捕获的异常
6) 常见的集合

  • Collection接口的子接口包括:Set接口和List接口
  • Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
  • Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
  • List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等

3. Spring事务跟配置问题,涉及的连接池作用等

  1. Spring优势:
    A. 轻量
    B. 控制反转
    C. 面向切面的编程AOP: Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
    D. MVC框架
    E. 事务管理
    F. 异常处理:提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。
  2. 支持的几种作用域:singleton,prototype,request,session,global-session
  3. 事务管理:
    A. 事务的特性:原子性,一致性,隔离性,持久性
    B. 事务的实现方式主要为:编码方式,声明式事务管理方式
    C. Spring的事务配置方式:没个bean都配置一个代理,所有配置共享一个代理基类,拦截器,tx标签的拦截器,全注解
    D. 事务的超时性,回滚跟只读:
    超时:
    @Transactional(timeout=30) //默认是30秒
    异常回滚:
    指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)
    指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})
    该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。
    正常的情况下也可以回滚:
    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    只读:
    @Transactional(readOnly=true)
    该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。
  4. Spring的配置方式:
    A. Xml的配置
    B. 注解配置
    C. 基于Java的配置
  5. 数据库连接池的作用:
    A. 资源的复用
    B. 更快的系统响应速度
    C. 统一的连接管理
    附spring-mybatis的配置:
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${db.master.url}" />
        <property name="username" value="${db.master.user}" />
        <property name="password" value="${db.master.password}" />    
        <property name="filters" value="mergeStat,wall,log4j2" /> 
        <property name="initialSize" value="5" />
        <property name="maxActive" value="100" />
        <property name="minIdle" value="10" />
        <property name="maxWait" value="60000" />
        <property name="validationQuery" value="SELECT 'x'" />
        <property name="testOnBorrow" value="true" />
        <property name="testOnReturn" value="true" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="1800" />
        <property name="logAbandoned" value="true" />
    </bean>
  1. 线程与如何处理高并发等
  1. 线程:线程是进程中的一个实体,被包含在进程中。通过多线程的编程,能更高效的提高系统内多个程序间并发执行的程度,提高系统资源的利用率。

  2. Sleep()跟wait()的区别:sleep是线程类的方法,让指定线程暂停执行指定时间,调用sleep不会释放对象锁。而wait是object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

  3. 死锁与活锁的区别,死锁与饥饿的区别?
    A. 死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
    B. 活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试
    C. 饥饿:一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行的状态。

  4. Java中有几种方法可以实现一个线程?
    A. 继承Thread类
    B. 实现Runnable接口
    C.实现Callable接口,需要实现的是call()方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值