Java笔试

javac 就是把.java编译成.class语言的编译器。jvm执行.class文件html

java大小写敏感前端

一个.java能够有多个类,只能有一个publicjava

dir  windows下查看当前目录mysql

注释不会出如今字节码中程序员

类名首字母大写 第二个单词首字母大写web

方法,变量 第一个小写spring

数字不能做为开头sql

 

静态方法里不能调用非静态方法和成员变量

public class StaticAccessNonStatic
{
public void info()
{
System.out.println("简单的info方法");
}
public static void main(String[] args)
{
info();
}
}数据库

异常编程

 

Throwable是Java错误处理的父类,有两个子类:Error和Exception。

 

Error:没法预期的严重错误,致使JVM虚拟机没法继续执行,几乎没法恢复捕捉的

Exception:可恢复捕捉的。java健壮程序的手段。

 

Java提供了两类主要的异常:runtime exception和checked exception (编译时被检查的异常)。

checked exception (编译时被检查的异常):JAVA编译器强制要求咱们必需对出现的这些异常进行catch或throws。因此,面对这种异常无论咱们是否愿意,只能写一大堆catch块或throws去处理可能的异常。

如IO异常,以及SQL异常等。

runtime exception:编译经过,但运行通不过,出现RuntimeException,一般是程序员出错。虚拟机接管会终止线程或主程序。如错误的类型转换、数组越界访问和访问空指针等

       String:适用于少许的字符串操做的状况

  StringBuilder:适用于单线程下在字符缓冲区进行大量操做的状况,不安全

      StringBuffer:适用多线程下在字符缓冲区进行大量操做的状况

 

   super用来访问父类的方法和属性

1:用最有效率的方法算出2乘以8

    将一个数左移n位,就至关于乘以了2的n次方

2:&和&&的区别

    &判断两个表达式,&&第一个为false时则不会判断第二个。

3:==  和  equals的区别

   ==是判断两个字符串在内存中的首地址

   equals 判断两个字符的区别;

4:堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(Last-In/First-Out);队列是一种特殊的线性表,特殊之处在于它只容许

在表的前端(front)进行删除操做,而在表的后端(rear)进行插入操做,先进先出。

 

集合

5:Java主要集合

 位于Java.util包中

 只能存放引用类型的数据,不能存放基本数据类型

集合是由数组来实现的,对数组作的封装

一:数组声明了它容纳的元素的类型,而集合不声明。这是因为集合以object形式来存储它们的元素。  

二:一个数组实例具备固定的大小,不能伸缩。集合则可根据须要动态改变大小。  

三:数组是一种可读/可写数据结构---没有办法建立一个只读数组。然而可使用集合提供的ReadOnly方法,以只读方式来使用集合。该方法将返回一个集合的只读版本。  
集合分类:

Collection:List、Set
Map:
HashMap:非线程不安全 容许一个空值key
HashTable:安全
treemap:实现了sortmap接口,用到排序最好
linkedHashmap:输出和输入的顺序相同
weakhashmap:弱引用方式,key再被引用则被回收。
Arraylist 1.5倍 不一样步 线性
vector 2倍 同步
linkedlist 从头开始遍历,随机访问效率低,插入效率高 链表 不安全

三个均可以改变大小, Collection接口 Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法。 Set 和List 都继承了Conllection,Map。

        set                                    list                                          map

      不能重复                           可扩展                                 键对象和值对象映射的集合                    

       随即储存,插入,删除      线性存储                             没有继承collection                                                              

       遍历效率低           

Collection 和 Map 的区别
容器内每一个为之所存储的元素个数不一样。
Collection类型者,每一个位置只有一个元素。
Map类型者,持有 key-value pair,像个小型数据库
Collection、List、Set、Map都是接口,不能实例化。
    继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化
连接:https://wenwen.sogou.com/z/q799124796.html

选择题
接口能够继承接口,抽象类可实现接口。抽象类是能够继承实体类,但前提是实体类必须有明确的构造函数,
抽象类中能够有静态的main方法
同步:是在A要用到资源时,B正在使用资源,A等待。
异步:不够关心其它线程。
一个字节占8位,一个中文字占16位。
JNDI用于数据库连接池查找。
顺序表:内存地址相邻,经常使用于存取第i个元素和它的前趋值。

简答题:
缓存:把数据库中查询出来的使用过的数据存储在内存中,以便后期使用。
hibernate一级缓存:由session管理。生存周期短,线程不安全,效率提高不高。
二级缓存:sessionfactory管理(无关紧要)全局缓存能够实现多线程与事务共享。独立于hibernate(三方产品)
适用于:数据量较小,数据修改较小,不会被大量共享,不是重要的数据

clone的做用:返回一个object类

jsp优势:解决servlet的缺点,用jsp来维护html的显示。实现业务逻辑和视图实现的分离。

get方法用来获取服务器段资源信息
post:既能够获取又能够向服务器传送数据,url没有明文显示,更安全。
若是HTTP请求的方法是get Servelet就用doget,post用dopost(),

什么是反射机制:获得一个对象所属的类,能够运行时自我检查,获取一个类的成员变量和方法在运行时调用对象。

静态变量:内存中只有一份,存在栈(s)中,地址对应常量区(a) string s=a;
非静态变量:两份,堆,栈都有。地址对应堆区,堆区对应常量区(a),string s ,new String(“a”) ,a

什么是序列化:把对象以一串字节表示的过程,用于解决对象进行读取操做时的问题。

堆和栈的区别:
栈:由操做系统释放,存放函数的参数值,局部变量的值等,大小固定,存取更快。

堆:存储运行时产生的变量,由程序员释放。,每个实列对应一个jvm,更灵活(生存周期)
在栈中定义一个变量,变量指向堆中的地址,这个变量叫作引用变量。

是否有内存泄漏问题:
存在
概念:再也不被程序使用的对像,变量还在内存中。
java有垃圾回收机制,回收标准:1:在堆中申请的空间没有被释放。能够保证
2:对象再也不使用,内存还保留。不可保证
状况:静态集合类,各类连接,网络连接,io连接等,监听器,变量不合理的做用域。

Socket是什么:套接字,用于两个程序之间实现通信
生命周期:打开socket,使用,关闭。
NIO是什么:实现反应器模式,采用了非阻塞的方式,在处理大量并发要求时,nio比socket的效率高不少。
为何说java是平台独立性语言:不一样的机器会有不一样的jvm,jvm能够把java生成的中间码翻译成能够执行的代码
jion的做用:让调用该方法的线程执行完run后再执行jion后面的代码。用于两个线程的合并


把字符串右移:
private static String moveToRight(String str,int position) {
            String str1=str.substring(str.length()-position);
            String str2=str.substring(0, str.length()-position);
            return str1+str2;
//返回左移n位字符串方法
    private static String moveToLeft(String str,int position) {
        String str1=str.substring(position);
        String str2=str.substring(0, position);
        return str1+str2;

设计模式:是设计经验的总结,代码重用,避免修改。

                   单列模式:保证在应用程序的生命周期中任何一个时刻,单列类的实例都只有一个。构造函数必须私有,提供一个全局访问                                            点。

                   

 
 

实现一:当即加载 / “饿汉模式”

 
 

当即加载就是使用类的时候已经将对象建立完毕(无论之后会不会使用到该实例化对象,先建立了再说。很着急的样子,故又被称为“饿汉模式”),常见的实现办法就是直接new实例化


//
饿汉式单例 public class Singleton1 { // 私有构造 private Singleton1() {} private static Singleton1 single = new Singleton1(); // 静态工厂方法 public static Singleton1 getInstance() { return single; } }

 

 
 

实现二:延迟加载 / “懒汉模式”

 
 

延迟加载就是调用get()方法时实例才被建立(先不急着实例化出对象,等要用的时候才给你建立出来。不着急,故又称为“懒汉模式”),常见的实现方法就是在get方法中进行new实例化。


public
class Singleton { // 将自身实例化对象设置为一个属性,并用static修饰 private static Singleton instance; // 构造方法私有化 private Singleton() {} // 静态方法返回该实例 _加一个synchronized变成安全的懒汉模式。 public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } }
DCL双检查锁机制
public
class Singleton { // 将自身实例化对象设置为一个属性,并用static修饰 private static Singleton instance; // 构造方法私有化 private Singleton() {} // 静态方法返回该实例 public static Singleton getInstance() { // 第一次检查instance是否被实例化出来,若是没有进入if块 if(instance == null) { synchronized (Singleton.class) { // 某个线程取得了类锁,实例化对象前第二次检查instance是否已经被实例化出来,若是没有,才最终实例出对象 if (instance == null) { instance = new Singleton(); } } } return instance; } }

设计四个线程,其中共两个线程每次对j增长1,另外两个线程每次对j减小1。循环100次,写出程序。
    https://blog.csdn.net/ankeyuan/article/details/39671979

 

                    工厂模式:负责实列化有大量公共接口的类,工厂模式能够动态的决定将哪个类实列化。

https://www.cnblogs.com/zhi-hao/p/4028169.html

                                    简单工厂:用户不去直接new一个对象,建立对象都在factory中。

                                   方法工厂:定义一个工厂接口,分别实现不一样产品的实现类。客户端知道建立什么类,实现类在实现工厂中建立。在添加产品时不须要修改之前的代码。

                                   抽象工厂:他用来建立一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个                                                      产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。一个产品须要不少部件,如汽车(跑车,                                      赛车,轿车,不一样产品的跑车是一个产品族),还有须要送的礼物,添加礼物工厂接口,实现接口。两个工厂接口在                                     同一接口下。

 

                   适配器模式:把一个类的接口转换成客户端所指望的另外一个接口,从而使本来因接口不匹配而没法一块儿工做的两个类一块儿工                                              做。

                  观察者模式:一个对象经过添加一个方法(该方法容许一个对象,即观察者注册本身)使本身变得可观察当可观察对象更改                                             时,会将消息发送到已经注册的观察者。

 

    JDK:(Java Development Kit):Java开发工具包,包含编写Java程序所必须的编译、运行等开发工具以及JRE。
    JRE:(Java Runtime Environment)即为Java运行环境,提供了运行Java应用程序所必须的软件环境,包含有Java虚拟机(JVM)
    和丰富的系统类库。
    
    JVM:(Java Virtual Machines)即为Java虚拟机,提供了字节码文件(.class)的运行环境支持。 
    
    关系:JDK包含JRE包含JVM

   javac:是java语言编程编译器。
    全称java compiler。将java文件编译成字节代码的class文件。

 

volatile本质是在告诉jvm当前变量在寄存器中的值是不肯定的,须要从主存中读取,synchronized则是锁定当前变量,只有当前线程能够访问该变量,其余线程被阻塞住.

 

Servlet

7:Servlet采用java语言编写的服务器端程序,它运行于web服务器中的servlet容器中,提供请求响应的web服务模式,动态的生成web内容,
      客户端发送请求至 服务器
      服务器启动并调用 Servlet,Servlet 根据客户端请求生成响应内容并将其传给服务器
      服务器将响应返回客户端
 

servlet 乱码:response乱码,requset乱码

response.setCharacterEncoding("UTF-8");response对象中的数据以UTF-8解码后的字节流发向浏览器;

response.setContentType("text/html;charset=utf-8")

或者 response.setHeader("content-type","text/html;charset=UTF-8");告诉浏览器用utf-8解析

request.setCharacterEncoding("utf-8");

<%@ page language="java" pageEncoding="utf-8"%>

/my.ini中的default-character-set=gbk

character-set-server=utf-8;

从新启动mysql的服务

 

tring url = "jdbc:mysql://localhost:3306/dbname?useUnicode=true&amp;characterEncoding=UTF8";
 
实列化:收到请求

 

     

Servlet 经过调用 init () 方法进行初始化。

init 方法被设计成只调用一次。它在第一次建立 Servlet 时被调用,在后续每次用户请求时再也不调用。

 

Servlet 调用 service() 方法来处理客户端的请求。

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

 

Servlet 经过调用 destroy() 方法终止(结束)。

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可让您的 Servlet 关闭数据库链接、中止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其余相似的清理活动。

 

最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

 

      
      网络三层结构的角度看 JSP 和 Servlet 的区别,一个网络项目最少分三层:data layer(数据层),business layer(业务层),presentation layer(表现层)。固然也能够更复杂。Servlet 用来写 business layer
是很强大的,可是对于写 presentation layer 就很不方便。JSP 则主要是为了方便写 presentation layer 而设计的。固然也能够写 business layer。
 
     一个 Servlet 在一个时刻可能被多个用户同时访问
     是从Servlet继承而来。只不过它在Servlet当中又添加/修改了一些方法,做了新的封装。

      采用JSP来表现页面,采用Servlet来完成大量的处理,Servlet扮演一个控制者的角色,并负责响应客户请求。Servlet建立JSP须要的Bean和对象,根据用户的行为,决定将哪一个JSP页面发送给用户。

特别要注意        的是,JSP页面中没有任何商业处理逻辑,它只是简单的检索Servlet先前建立的Beans或者对象,再将动态       内容插入预约义的模板。
多线程

多线程有两种实现方法:

      方法一:继承Thread类,重写方法run();

      方法二:实现Runnable接口,实现方法run();

                        方法三:实现callable接口。

实现同步有几种方法:例如:synchronized,wait,notify均可以实现同步。

终止线程:stop释放全部的锁,suspend不会释放锁,会形成死锁。

sleep:如同打印机每隔一秒钟打印一次;将机会让给其它线程。不会释放锁。必须捕获异常。

yiled:给更高优先级获得运行机会。

synchronized:能够用在方法,特定代码块中,在竞争激烈时性能降低的很快。必须以相反的顺序释放锁,自动解锁。

sock:性能不变,手动释放(fianlly),均可以用来实现多线程,多了锁投票,定时锁,等候,中断等。

JDBC

9:JDBC(Java数据库链接,java数据库链接)是一种用于执行SQL语句的Java API,能够为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此能够构建更高级的工具和接口,使数据库开发人员可以编写数据库应用程序,JDBC实现了全部这些面向标准的目标而且具备简单,严格类型定义且高性能实现的接口。

   Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了很是轻量级的对象封装,使得Java程序员能够为所欲为的使用对象编程思惟来操纵数据库。 Hibernate能够应用在任何使用JDBC的场合,既能够在Java的客户端程序使用,也能够在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate能够在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。

DAO是Data Access Object数据访问接口,数据访问:故名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间

Inverse是hibernate双向关系中的基本概念。inverse的真正做用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录!

10;struts

它经过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller〔MVC〕设计模式的应用框架〔WebFramework〕,是MVC经典设计模式中的一个经典产品

truts框架具备组件的模块化,灵活性和重用性的优势,同时简化了基于MVC的web应用程序的开发。

由JSP创建,struts包含扩展自定义标签库,能够简化建立彻底国际化用户界面的过程。

struts中,基本的控制器组件是ActionServlet类中的实例servlet,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。

Action,这个类一般由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。

Model部分

由JavaBean组成,ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionForm里面的请求参数处理用户的请求。

JavaBean则封装了底层的业务逻辑,包括数据库访问等。

View部分

该部分采用JSP实现。

Struts提供了丰富的标签库,经过标签库能够减小脚本的使用,自定义的标签库能够实现与Model的有效交互,并增长了现实功能。

Controller组件有两个部分组成——系统核心控制器,业务逻辑控制器

Spring框架是因为软件开发的复杂性而建立的。Spring使用的是基本的JavaBean来完成之前只可能由EJB完成的事情。然而,Spring的用途不只仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用均可以从Spring中受益。

◆目的:解决企业应用开发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何Java应用

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框

ioc:

 IOC实际上是一个容器,至于什么控制反转依赖注入只不过是IOC这个容器这个spring核心在创造的过程当中的指导思想,更多的简化不少复杂繁琐的重复性工做,将之前只能在代码层作更改的东西,所有放在配置文件层面来解决。之前对象与对象之间在代码层产生的耦合关系,经过配置文件来产生耦合关系,而经过配置文件来产生耦合关系的对象与对象又能够轻易的解耦。

 

 aop:面向切面编程,经过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,经过对这些行为的分离,咱们但愿能够将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

若是说OOP的出现是把编码问题进行模块化,那么AOP就是把涉及到众多模块的某一类问题进行统一管理

相关文章
相关标签/搜索