java面试

java跨平台原理

     java通过不同系统,位数的jvm来屏蔽不同系统的指令集差异而对外提供统一的接口(java api),按照接口即可,系统需要部署到不同环境,在系统上装对应的jvm即可

 

搭建java开发环境:

     安装jdk,配置环境变量,安个elipse,装tomcat,装个git啊

 

     java中8中基本数据类型,int占4个字节,boolean占一个字节  ,

boolean 这个试编译环境而定
byte 1个字节
short 2个字节
char 2个字节
int 4个字节
long 8个字节
float 4个字节
double 8个字节


面向对象有四大特征: 继承      :  子类继承父类的特征和行为(子类对父类的扩展)


 

  多态      :       多态就是不同类的对象,对同一消息作出不同响应就叫多态。就像你对所有人说你结婚了,每个人的反应都是不一样的。

         多态存在的3个条件:

                1、继承关系

                2、重写父类的方法(子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 ,重写就i是一种多态::::::

                                                               重载:构造函数就是重载,参数个数不同)

                3、父类引用指向子类对象

         以下三种方法不能实现多态:(方法不能被重写)

            1、static方法,被static修饰的方法是属于类的,而不是实例的。

            2、final,被final修饰的方法不能被重写

            3、private和protected方法。private修饰的方法对子类不可见。而protected修饰的方法可以被子类见到,也可以重写,但是不能被外部引用。

 

抽象:把现实对象(共同的属性,特征)抽象为类。

 

 封装:对象的属性有自己的方法来读取和改变

 

装箱:就是把基本类型转换为包装类型Inter i=Interger.valueof(1)             自动装箱

拆箱:包装类型转为基本类型:int j=i.intValue(Interger i)

包装类型具有面向对象的特征,基本类型基于数值,对象类型基于引用,,,变量只能存储数值,而不具备操作数据的方法。对象类型则截然不同,变量实际上是某个类的实例,可以拥有属性方法等信息,不再单一的存储数值,可以提供各种各样对数值的操作方法,但代价就是牺牲一些性能并占用更多的内存空间

 

==除了比较内容,还比较引用地址。equals就只是比较内容

String是不可变字符,没有提供修改字符的方法(fianl属性),

StringBuilder和buffer:可改变字符串(char的定义,没有fianl属性,可通过append方法追加内容),buffer是线程安全(要加锁,故效率低),builder是线程不安全

 

 

集合:

 

list有序,可重----------------------arraylist底层是数组【查询快】,linkList底层是链表【增删快】

set无序,不重,(equals和hashcode判断完后再添加进来)

存储键值对的是map--------------------hashmap可把null作为键或者值,线程不安全,效率高(hashTable不可以null,线程安全)         concurrentHashMap线程安全有高效

 

 

图片声音,视频只能用字节流,拷贝文本用字符流

 

 

继承Thread类开启线程-new Thread            ......thread.start---------或者实现runnable接口        

class Runner1 implements Runnable { // 实现了Runnable接口,jdk就知道这个类是一个线程  
16     public void run() {
通过打印日志可区分线程

线程并发库,简单了解过
什么是线程:线程是操作系统能够进行运算调度的最小单位,一个进程可包含多个线程,避免线程过多,系统崩溃
线程池作用:限定线程并发数,管理线程
Executors提供线程池

newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行-------先进先出 First in, First out.



设计模式:可复用的解决问题的方法。
单例:饱汉模式:构造方法是是私有化的,提供方法获取单个的实例对象,一出来就创建实例(饱汉) 需要的时候才创建(饥汉模式)
public calss personFactory{
private personFactory(){}
private static PersonFactory instance=new PersonFactory;
publiic static PersonFactory getInstance(){
return instance}
} ---------------------------反射就是一个单例模式
工厂模式:spring工厂(容器)----------IOC(对象创建让共厂去作)
代理模式:Spring的AOP就使用了动态代理(不改变原有结构的基础上,还能为原有的新增功能,如刘德华的代理人就为刘德华增加了功能,而刘德华也不用去学习这项技能就能使用这项技能)
包装模式

 get数据在http协议头中会在地址栏显示,2kb上线     post   2M上线

post放在http尾部

 

 

servlet:

  java编写的服务端程序,它实现了servelt接口          生命周期:加载(tomcat启动)。。。实例化(由容器tomcat实例化创建)。。。初始化。。。处理请求。。。服务结束(tomcat关闭),

 

 

forward原请求的跳转,(不会显示转向后的地址,推荐使用)    redirect重新发起请求后的跳转。jsp侧重视图(结合了html),servlet侧重逻辑(并从html中分离)

 

jsp9大内置对象   requeat。response,application。session            。out

 

cookie保存在客户端(不安全,最大为4k,购物车),session保存在服务端(安全,用户的登录信息),用于自动登录

 

 

mvc               v=jsp           m=javaBean           m=servlet

 

jdbc              java数据库连接

 

非关系型数据库:redis,mogodb,hadoop

 

一范式:实体的属性(是原子的)它不能有多个值和重复属性,如一对多就要分开建表

二范式:每行都有唯一标识(主键)

三范式:表中要有外键

原子,一致,持久,隔离型---------------事务四大特性

mysql最大连接数:默认是100

max_connection=100

 

mysql通过关键子limit offset,size进行分页从多少到多少  select * from user order by id limit "pagesize*(nuymber-1)",pageSize,

收到客户端{pageNo:1,pagesize:10} 
select * from table limit (pageNo-1)*pageSize, pageSize;

收到客户端{pageNo:5,pageSize:30} 
select * from table limit (pageNo-1)*pageSize,pageSize;

 

oracle通过三层嵌套查询完成分页。可以网上拷贝

 

触发器:条件满足就执行操作:自动通知好友,发帖,(更新发帖时间)增加日志时作后触发:create tigger  after。。。。。。。。。

存储过程:创建时编译,执行不再编,常规sql执行一次,编译一次,----------------可降低网络负载,业务发杂,多sql语句,安全性较高---------会用到它

create procedure insert 。。。。。。。call insert。。。。。。。。。。。。

jdbc可通过prepareCall(call insert。。。)调用存储过程     +//registerouutParameter(3,type)

 

 

jdbc屏蔽了各个数据库的私有语言,java提供了统一的操纵数据库的api接口(让厂商自己实现接口,然后以接口方式调用)

贾琏欲执事

 

class。forname(com.mysql.jdbc.driver)

DriverManager.getConnect("jdbc:locaalost:33406//lmeeting","username","password")

connect.createStatement()

statement.executequery()

while(result.next){

System.ou,....

 }

connect.close

 

 

 

 

 

 

   //1.加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.通过(java.sql下的)驱动管理类获取数据库连接
            Connection conn= DriverManager.getConnection(URL, USER, PASSWORD);
            //3.通过Connection对象创建Statement对象(Statement:用于执行SQL语句的对象,通过COnnection的createStatement()方法来获取)
            Statement st=conn.createStatement();
            //4.通过Statement执行SQL语句:
              /*实际运行中:应该是
                定义sql语句,?表示占位符。
                String sql="select * from book where name=?"
                PreparedStatement preparedStatement=conn.createStatement(sql)
                preparedStatement.setString(1,"java程序设计")
                ResultSet rs=preparedStatement.executeQuery*/

            ResultSet rs=st.executeQuery("select * from book");
            //5.处理(操作)数据库的返回结果(结果集ResultSet)
            while(rs.next()){
                out.write(rs.getString("name")+" "
                        +rs.getString("number")+"<br>");
            }
            //6.释放(关闭)资源
            rs.close();
            st.close();
            conn.close();

prepareStatement预准备:可以防止sql注入,速度快

 

数据库连接池,限制连接数,不会因为数太多,程序崩溃,一次连接就处于会话中,不用每次创建连接,销毁连接,时间快,节约资源

html网页结构。css美化页面,js表单验证,动态交互

ajax异步js+xml,它是用来和服务器进行数据库交互的,异步向服务器发送请求,完成局部更行。。。。。。。。。登录注册,二级联动。。。

jq封装了js,使用更方便

jq有id。class。标签等选择器,层次选择器div下的第一个p标签。。属性选择器。单选,多选的通过name获取到值

 

H5:增强了音视频功能,web存储功能

css:增加了盒子边框,曾强了阴影。动画

bootstrap优先用于移动设备端的ui框架,响应式布局。增加媒体查询,即设备的大小,宽度

 

框架:就是一个架子。项目的一个结构,半成品的程序。可帮助我们快速构建应用,扩展性很强,jar包就是对jdk的扩展,管理与维护程序

mvc框架-------解决 传统的mvc(jsp+servlet+javaBean)            ,单个接收参数,不能哦通过model接收,跳转方式单一,不能实现模块化管理(所有的ervlet都陪在web.xml)

struts2和springmvc是mvc框架

 

struts执行流程:

        客户发请求:

       请求经过过滤链FilterDispatcher调用(过滤分发者)然后询问actionMapper-----调用那个action

找到了就交给actionProxy,--------------》通过configuration Manager去询问配置文件,找到对应action

action处理请求,返回结构果

浏览器放松一些请求,经过一系列过滤器来到了核心过滤器(strutsPrepareandExecuteFilter),通过actionMapper判断请求是否需要action处理,需要

actionProxy就会通过Configuration manager从struts.xml查找调用响应的action

创建ActionInvocation实例去调用action对应方法获取结果集

返回结果集给浏览器

 

 

拦截器:是动态拦截action调用的对象,定义action执行前后的断码------------------------AOP动态配置方式,可以在action执行前后,加入相关的逻辑业务,

如登录注册。。。。权限判断。。操作日志【操作日志,文件上传,编码。。。都是拦截器做的】

拦截  判断 寻找 执行  响应

 

 

springmvc:核心控制器controller捕获请求,查找handler,执行handler。选择viewResolver,通过viewResolver渲染视图并返回

 

 

DispatcherServlet捕获请求。。(解析url )   选择合适的handleAdapter(提取requeat数据封装进modelandview)   更具modelandview查找viewResolver,他在结合modelandview渲染视图,将结果给客户端

 

 

springmvc是线程安全的,基于方法,核心控制器是servlet,,它只有这样一个实例,提供全注解,通过方法参数进行接收,intercepter拦截机制action是自己的,springmvc用的是独立的AOP方式进行拦截@ResponseBody注解可自动将对象转为json格式

 

struts是基于对象,每个请求都实例化action,并注入属性,通过xml配置(虽提供全注解,但不好维护,接收多种参数通过ValueStack进行传值赋值)

spring   容器(map)+反射+配置文件       通过配置文件提取键名,,并存到map,需要的时候通过map的建去找值,再反射调用

 

AOP:  使用动态代理的方式在执行前后或出现异常后作相应的逻辑处理,事务处理,权限判断。日志。。

 

事务创播特型:就是多个事务存在是整么处理的策略,存在,则执行,没有,则再找一个

通过描述对象,关系映射将对象持久化到数据库,解决对象与关系不匹配的现象------------------------jdbc可实现(但是,维护比较难)

 

 

ibatis(mybatis)与hibernate区别:

              都是orm框架,屏蔽了jdbc底层的细节(创建连接,贾琏与执事)--------------sql与java代码分离,将结果集自动封装成java对象

             hibernate:自动生成sql,特别复杂的,高效率的sql,hibernate很难适应

mybatis面向sql(),hibernate面向对象-------------都是orm框架,都是对jdbc的封装

 

 

不处于session的对象叫临时状态

持久化且在session中叫持久化对象------------session.save()

持久化,但不在session---游离对象 ---------------session.clear---------------

被计划删除的叫删除对象-----------------session.delete(临时状态)

 

 

 

 

 

 

缓存;为了提高访问速度。把磁盘访问或数据库访问变为内存访问【更新数据库,还要更新缓存--------------常用的数据才放在缓存中】

          一级缓存:session缓存,一次事务,执行了就在session里缓存一下,不能被卸载------------------ 一级缓存是内置的,不能被卸载(即不能关闭一级缓存)

        二级缓存:sessionFactory的缓存:他与应用的周期一样,集群范围的缓存---------tomcat关闭了【应用启动到应用及结束】,缓存才被清除(默认关闭)【常量数据,很少被修改的,不是很重要的数据】

          它没有解决分布式缓存问题【因为session的作用在一台机子上的】-----------可使用redis的中央缓存来代替二级缓存。

 

webservice--------------SOA(面向服务的编程)---------不依赖平台,和语言,实现不同语言间的调用----异构整合,不同客户端整合

webservice是服务层--可调用service---------天气预报。。单点 登录。。。

 

activiti  业务流程和工作流程---------------类似请假流,报修流。。。

 

 

linux是长时间运行,比较稳定的操作系统,常作服务器,,,,(用于编译得到软件包,如redis)   su-u切换管理员     cd进入目录   ls列出文件

pwd  获取路径            vi修改文件     mkdir建文件夹   ssh服务的端口是22,用xshell连接远程服务器(等ssh客户端),xftp上传文件

 

云主机:租的主机

数据库优化:

   缓存使用redis,,,读写分离。。。。。。一台不能需求,采用多台服务器

分表          创建索引          查找定位

posted @ 2019-03-19 13:25  goodshred  阅读(231)  评论(0编辑  收藏  举报