java面试知识大致摘要

裝箱和拆箱
有了基本數據類型,爲什麽還要包裝類: 基本數據類型不具備面嚮對象的特性,不能封裝一些好用的方法 max min啊 之類的
裝箱 integer i=1; 把基本類型自動轉化為integer
拆箱:int j=i; 自動裝箱 int j=i.intvalue() //手動裝箱 飯莊想
緩存值 : 對象緩存 -128~127

String StringBuffer StringBuilder
String 是fanal类,每次对String类型的修改都会重新创建一个String对象
StringBuffer和StringBuilder则不同,允许对字符串进行修改,且不会重新创建对象。
而StringBuilder与StringBuffer不同的是,StringBuffer是线程安全的,StringBuilder不是线程安全的,因此在多并发的情况下,使用
StringBuffer,而单线程情况下,StringBuilder效率更高。

集合:
list set map
list 有序,可以重复,实现类有ArrayList 和linkedlist
set 无序,不可以重复 根据hashcode 和equal 来判断重复。一个对象要存在set中,必须重写hashcode和equal方法

ArrayList和LimkedList
ArrayList底层实现是数组,LinkedList底层实现是链表
因此在查询的时候ArrayList是要优于LinkedList,但在插入和删除的时候,LinekdList更占优(数组是连续的内存,插入和删除时需要移动内存,链表的内存不要求连续,其用指针相连,查询时需要从头部开始,一个一个找)

HashMap和HashTable
都是用来存key_value数据
但是hashmap可以把null作为key_value的,而hsahtable不可以。
hashmap是线程不安全的,效率较高,hashtable是线程安全的。

问题:想线程安全,又想效率高:::CurrentHashMap(jdk1.5) 大的hashtable下实现小的hashMap??

copy一个文件:
使用字节流,拷贝的文件有多重形式,可以是图片,文本,声音图像等,

线程:jdk5增加了DougLea并发库 java.util.current提供了对线程的优化,管理等各项操作
线程实现:继承Thread 和实现runnable
线程区分:setName;
线程并发库: 简单了解过:Executor提供了4种静态方法
newcacheThreadPool 可缓存线程池,可灵活回收线程,若无回收则创建
newfixedThreadPool 创建一个定长线程池,可控制线程并发数,超出的线程会进入等待
newsingelExecutor 单一线程池,fifo lifo
newscheduledThreadPool 定长线程池,执行定期或周期性任务
线程池的作用:(类比数据连接池)
限定线程的个数,不会导致由于线程过多而引起的系统缓慢或崩溃
线程池不需要每次都去创建或销毁线程,响应时间就快了

设计模式:
前人无数实践总结出的,在设计过程中可以反复使用的设计方法模板
常用的: 单例模式 SpringMVC
饱汉模式:一出来就实例化
饥饿模式:需要的时候才创建。
private static Test test=null;

              public  Test  getTest(){
                return new Test();
              }
             
       工厂模式:IOC   对象的创建交给spring去处理
       代理模式:AOP jdk cglib代理方式  Mapper代理
       观察者模式:
       订阅/发布模式:
       享元模式:

http get和post
get和post 是http的请求方式,用户用不同的请求方式来完成对资源不同的访问操作
get post put delete对应着数据库的增删改查
get可以在url上附带数据。get提交的数据会在杜志兰显示出来http://localhost:8080/get.do?..数据部分,post不会(post将数据村A

组http数据包中)
get会因为地址栏长度显示而限制传输的数据,而post不会
post比较安全

説説對servelet的理解
servlet是(server applet)的縮寫 。servlet是java服務端程序(這些servlet都要實現servlet這個接口)。
主要功能:交互式瀏覽和修改數據,生成動態web内容。

httpServlet重寫了doget和dopost,以完成隨get和post的響應
服务器会根据每个request请求创建一个一个线程
程序启动加载servlet. 服务器初始化(init)servlet. 调用servlet的service()中的doget 或dopost servlet容器关闭时会调用servlet

servlet的foeword和direct
foeword是服务端定向,用户只发送一次请求
direct,客户端重定向

jsp和servlet:
每一个jsp都会被翻译成一个继承httpServlet的类,也就是说每一盒jsp就是一个servlet,对外提供服务
servlet是htnl response.getWriter();
jsp更侧重于视图的展示,而servlet更侧重于控制逻辑
二者

四大作用域:pageContext request session appication
Session 和Cookie会话跟踪技术
Session 记录在服务端Cookie记录在客户端。但是Session依赖于 cookie而存在,根据sessionId唯一标志
cookies在客户端,session在服务端(占用性能)
cookies不安全(数据小于4k,一个站点一般保留20个cookies)
重要信息存session 其他信息存cookie

mysql最大连接数:默认100
特定服务器上的数据库同时提供多个连接,但只能支持一定数量连接,数据库需要设置一个最大连接数
mysql 的分页思路;
1.在很多数据时,数据不可能完全显示,就要进行分页
limit offset,size (‘其实索引’,分页大小)

存儲過程的優點:
1:(編譯一次):只在創建時進行編譯,而後都不需要在編譯。而sql每次調用都會進行編譯
2:重複使用:一次創建重複使用。
3:複雜的業務邏輯需要很多sql。而客戶端和服務端交互很多次的話會產生大量的網絡傳輸,影響效率。
4: 安全性高,存儲過程無需顯示的訪問底層數據庫,使用execute調用即可

触发器:关键字trigger
特殊的存储过程:包装一系列sql
触发器在特定的情况出发,并执行定义的操作。

jdbc调用存储过程 prepareCall

jbdc的理解:
java连接数据库的桥梁。封装了一系列的java 连接,访问,操作数据的方法
jdbc prepaStatement 和Statement
1,可读,可维护
2.安全
3.预编译

Ajax:
异步的JavaScript和Xml
作用:通过Ajax和服务器进行数据交换,AJAX就可以使网页实现局部刷新
实现:xmlHttpRequest(open send responseTest/responseXML 局部响应)
登录失败不跳转,注册时提示用户存在

JQuery
js封装后的框架。
id选择器,类选择器,标签选择器,通用选择器,层次选择器 > (空格)
bootstrap 优秀的移动设备前端ui框架

ORM:对象关系映射,解决对象与关系数据库不匹配

webService:SOA面向服务的编程,不依赖于语言和平台,可以实现不同语言之间的调用 通过internet可以进行基于http的调用

linux:长时间稳定运行的操作系统,一般用来做服务器
一叠软件没有软件包,需要在linux上进行编译(redis nginx)
常用指令:Pwd:获取当前路径
cd :切换路径
Su -u :切换到管理员
ls ll :查看目录
ifconfig:查看端口
tar -zvxf 解压文件
chomd: 赋权限
文件指令: tail :查看
rm -rf 删除文件
vim :修改
mv 移动文件或次该文件名
cp 复制
文件夹: mkdir
rm -rf

数据库优化:

  1. 优化sql 查找慢查询
    优化:
    建索引
    分表
    读写分离
    缓存

  2. 数据库优化: 遵循范式:

  3. 选择合适的数据引擎:
    1.MYISAM:对事务要求不高,同时是以查询和添加为主的
    2.INNODB:对事务要求级别高保存的都是重要数据
    3.Memory 存储:
    我们数据变化频繁,不需要入库,同时又频繁的查询和修改
    MYISAM不需要事务,不要考虑同步锁,查询和添加的速度快
    INNODB支持事务。需要同步锁

  4. 建索引:普通索引/唯一索引/主键索引/全文索引
    索引弊端:浪费资源,对插入。删除,修改有影响
    建索引条件,1.肯定是经常用到的字段,不做查询的话,索引无意义。
    2.该字段内容不是唯一的几个值
    3.字段内容不会频繁变化
    like 查询 %aaa 不用索引 ,aaa%可以用索引
    or 左右的语句要么都用索引,要么都不用
    数据少,就不用索引
    5.分表 水平分表(按行) 垂直分表(按列)
    水平分表(按行):跟据关键字把行分开 比如区间 id 1~100 101~200 放到不同的表
    水平分表策略:按区间分表,按时间分表,hash分表

    垂直分表:当某个或某几个字段的值非常多,(文本,或二进制)时,很少会去查询,加载又特别的耗时时,就采用水平分表
    即把它分离出来,放到另一张表,并通过外键关联起来
    6.数据库读写分离,主从同步:当数据库的数据量特别大的时候,从数据库查询字段是非常耗时的,并会影响数据的插入,删除和修改
    此时采用数据库读写分离,插入,删除,修改等操作在主服务器完成,查找在从服务器上执行,(nginx负载均衡可以实现)
    7.使用缓存(redis)
    8.sql优化
    9.一次存几百万条数据
    使用批量操作,可用代码实现,也可用存储过程

redis:
运行在内存中,以key-value方式存储数据的nosql 数据库
计数器(原子性内存操作)
可以解决内存溢出的问题
分布式缓存

redis 保存對象方式:
json字符串:需要把對象轉換為json字符串,當作字符串處理
優點:設置和獲取比較簡單
缺點:沒有專門的方法,需要把對象轉換為json

字節:(百萬級別數據用序列化)
需要做序列化,把對象序列化為字節保存。

redis数据淘汰机制:内存有限  保存
  allkeys-lru:最少使用的淘汰
  allkeys-random:从数据集(server.db[i].expires)中随机淘汰
  volatile-random:从已设置过期的数据集(server.db[i].expires)中随机淘汰
  volatile-ttl从已设置过期的数据集(server.db[i].expires)中挑选最近最少使用的数据进行淘汰
  volatile-lru从已设置过期的数据集(server.db[i].expires)中挑选将要过期的数据进行淘汰
  no-enviction(驱逐):禁止驱逐数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值