java笔试面试题总结

1:字符串如何倒序输出?

 1 toCharArray()

2 StringBuffer的reverse()方法

     StringBuffer sb = new StringBuffer();

  sb.append(a); //放数据
  String rea = sb.reverse().toString();//倒序输出,sb.reverse()是StringBuffer类型

2:StringBuffer,String,StringBulider区别?java笔试面试题总结_第1张图片


3: Map与Hashmap 的关系?  Map是一个接口不能实例化,HashMap是Map的一个实现


 4:HashMap与HashTable 的关系?  

java笔试面试题总结_第2张图片


5:HashMap和TreeMap区别?  http://www.importnew.com/7010.html   

  java笔试面试题总结_第3张图片


 6:Hashmap什么时候扩容? Hashmap在元素达到负载因子对应数的时候就发生扩容

 7:Map里如何放list,如何得到list中的值?list 中放Map 呢? 

  HashMap嵌套ArrayList的代码实现

  HashMap> hm = new HashMap> ();   

  ArrayList嵌套HashMap

  ArrayList> list = new ArrayList>();


8:对 Ioc理解   

  控制反转,存放对象的容器,对象的创建,在jvm启动时通过反射创建。用户想得到对象,通过注入方式取得。


 9:Aop的应用   性能检测,访问控制,日志管理,事务等


 10:ArrayList 与 LinkedList 的特点   

    ArrayList:查询快,插入.删除慢 数据结构 :数组,    LinkedList  双向链表 查询慢插入.删除快


 11:冒泡排序。

12:了解的设计模式,举例


 13:hibernate 的一级缓存与二级缓存 ,生命周期?

  一级:session 缓存,线程内的缓存,使用一级缓存的目的是为了减少对数据库的访问次数,缓存的生命周期依赖于Session的生命周期,当Session被关闭后,缓存也就结束生命周期 。

  二级缓存,sessionFactory 缓存,进程内的缓存。缓存的生命周期依赖于应用的生命周期,应用结束时,缓存也就结束了生命周期,二级缓存存在于应用程序范围.


 14:Mysql的主键自动增长如何设置   CREATE TABLE XXX (ID INT(5) PRIMARY KEY  AUTO_INCREMENT


 15:linix的常用命令,配环境变量? 

  a . pwd:用于显示当前工作目录; 

  b . ls:用于查看当前工作目录内容; 
  c . cd:用于改变当前工作目录。


 16:Spring有几种注入方式 ?

   常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入


  17:ApplicationContext 与 BeanFactory 的区别  java笔试面试题总结_第4张图片


18:c3p0 如何配置? 

c3p0的配置方式分为三种,分别是

1.setters一个个地设置各个配置项(不推荐)
2.类路径src下提供一个c3p0.properties文件

3.类路径src下提供一个c3p0-config.xml文件  (推荐) 

 1.最常用配置  

initialPoolSize:连接池初始化时创建的连接数,default : 3(建议使用)

minPoolSize:连接池保持的最小连接数,default : 3(建议使用)

maxPoolSize:连接池中拥有的最大连接数,如果获得新连接时会使连接总数超过这个值则不会再获取新连接,而是等待其他连接释放,所以这个值有可能会设计地很大,default : 15(建议使用)

acquireIncrement:连接池在无空闲连接可用时一次性创建的新数据库连接数

2:就是数据源,即数据库连接

注意:  

   1::配置完c3po.cfg.xml文件后,在spring配置的xml中去读取它。

  2:c3po.cfg.xml文件一定要放在src下


19:log4j日志如何配置?

  日志级别:

    DEBUG:用在任何觉得有利于在调试时更详细的了解系统运行状态的东东

    INFO:输出信息:用来反馈系统的当前状态给最终用户的、

    WARN:可修复,系统可继续运行下去

    ERROR:可修复性,但无法确定系统会正常的工作下去

    FATAL:相当严重,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话后果严重

  级别顺序:DEBUG < INFO < WARN < ERROR < FATAL

--------------------------------------------------------------------------------------

  log4j 使用步骤:

  1:引入log4j的jar 包

  2:在src下配置log4j.properties.主要是配置输出路径,输出时间格式,控制台选项

  3: 在web.xml中加入:


webAppRootKey
webapp.root

      
log4jConfigLocation
classpath:log4j.properties
 

     
log4jRefreshInterval
3000  容器会每30秒扫描log4j的配置文件


org.springframework.web.util.Log4jConfigListener

3.1  在web.xml 配置 log4j.properties。

3.2 在web.xml 配置 log4j的监听

  4:在类中

     Logger log = Logger.getLogger(TestString2StringArr.class);

     log.info("aaaa");


 20:SessionFactory 的作用?

  SessionFactory在Hibernate中实际上起到了一个缓冲区的作用 他缓冲了HIbernate自动生成SQL语句和其他的映射数据 还缓冲了一些将来有可能重复利用的数据.

  SessionFactory用到了工厂模式 用户程序从工程类SessionFactory取得Session实例 设计者的意图就是让它能在整个应用中共享 典型的来说 一个项目通常只需要一个SessionFactory就够了.


 21:ajax 的同步与异步?什么是异步?

同步处理就不一样了,说话后在吃饭,吃完饭后在看手机,必须等待上一件事完了,才执行后面的事情 
比方说一个人边吃饭,边看手机,边说话,就是异步处理的方式。 

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。


 22:数据如何在后台校验,如:邮箱,手机号,身份证号等?


 23:MyBatis 的${} 与 #{} 的区别?MyBatis 如何批量插入?

  1:  id=111 ,用#{},where id=#{id},转为 where id="111"; 用${}, where id= ${id},转为where id="id"; 

  2: 用#{}方式能够很大程度防止sql注入,$方式无法防止Sql注入。

  3:一般能用#的就别用$。

  MyBatis批量插入: 

1:xml 中 daomapping 文件


  INSERT INTO t_user
    (id, name, del_flag)
  VALUES
  
    (#{user.id}, #{user.name}, #{user.delFlag})
  

2:public void testInsertBatch() throws Exception {

    long start = System.currentTimeMillis();
    List list = new ArrayList<>();
    User user;
  for (int i = 0; i < 10000; i++) {
    user = new User();
    user.setId("test" + i);
    user.setName("name" + i);
    user.setDelFlag("0");
    list.add(user);
  }
  userService.insertBatch(list);
  long end = System.currentTimeMillis();
  System.out.println("---------------" + (start - end) + "---------------");
} 


24:web前后台数据交互的几种方式? json数据格式怎么验证格式正确?

  1.通过eval( ) 方法将字符串直接转化为JSON对象 并获得元素的值。

   var json_text = "{'book':{'name':'JAVA编程','author':['Liu','Xu']},'num':222}";
     //使用eval()将字符串转换为对象
     var json_obj = eval("("+ json_text +")");
   注意:"()"运算符
2:可以用JSON.parse(str);

    var str = '{"a":"1","b":"2"}';

    JSON.parse(str);

    结果是:Object{a:"1",b:"2"}

  注意:可以利用JSON Schema校验JSON数据格式
----------------------------------------------
 1 利用session对象 ,当客户访问同一网站的不同网页时,仍处于同一个session中。
  (1)后台代码
    request.getSession().setAttribute("name", name);

      request.getSession().setMaxInactiveInterval(2);
      response.sendRedirect("welcome.jsp");

   (2)前台代码(jsp页面)

      Object user=request.getSession().getAttribute("name");

  2 利用request重定向,设置setAttribute

  (1)后台代码

     request.setAttribute("name", "cute");
     request.getRequestDispatcher("welcome.jsp").forward(request, response); //网址不会改变

  (2)前台代码

    String name=request.getAttribute("name").toString();  
 3 利用Ajax进行异步数据请求(得到的数据可以以json或xml格式返回,便于处理)

 25:try ...catch......与 return ,finally在return前执行还是后?  

  try{

    return.....;

  }catch(){

  } 

  finally{

  return .....;

  }  return 3;        

  若finally{ }存在,执行try 或者catch中的return语句之后,在返回之前执行finally{}  ,顺序执行finally{}中的return 方法,finally中的return是一定会被return的,返回值以finally中的retrun返回值为准。注意:若代码中finally{}后还有 return ....; 则程序编译不了,必须删除掉finally{ } 后面的return ...; 程序才能正确编译。


26:垃圾处理器 GC的工作原理,GC什么时候执行   系统自身决定对不使用的对象删除,腾出内存空间。

27:SQL 关键字的执行顺序   java笔试面试题总结_第5张图片


 28:SpringMVC 如何搭建环境? spring?hibernate? MyBatis?

springmvc 环境基本配置

引入jar》》web-inf/lib

1:配置web.xml 中 前端控制器,初始化配置

2:创建springmvc xml文件

    2.1 扫描包

    2.2 跳转文件的前后缀

-----------------------------------------------------------------

spring 环境基本配置

引入jar》》web-inf/lib

1web.xml

1.1 ContextLoaderListener 监听器

1.2 springxml文件   

  2. 创建springxml文件。

   2.1 开启扫描

   2.2 扫描注解Bean,保证@Service @Repository的属性被注入

   2.3 配置事物管理

----------------------------------------------------------------

hibernate 环境配置

引入jar》》web-inf/lib

方法一:

1 src 下创建hibernate的核心配置文件 hibernate.cfg.xml

    1.1 配置数据源

    1.2 配置sessionFactory

    1.3 注册实体类的映射xml 如  user.hbm.xml

2.创建实体类,同一个包下创建实体类的映射xml,在xml中对应映射关系 

注意:

 1 :方法一hibernate.cfg.xml 的位置必须是在src下。

  2 :实体类的映射xml最好与实体类在一个包下

方法二:

  注解方式,hibernate.cfg.xml和实体类映射xml 都不用配置

1:spring 的配置xml

 1.1 配置数据源

    1.2 配置sessionFactory ,配置属性去扫描实体类。

2:实体类中直接使用hibernate注解就可以了 

--------------------------------------------------------------------------------------------

 MyBatis的环境配置 

配置文件方式 

1 .创建Dao接口,定义方法 

2:创建实体类 

3:创建实体类的mapper.xml 文件 主要是写sql语句,Mapper中select标签的id值dao中方法名一样 

4mybatis-config.xml

    4.1数据源

    4.2注册映射用户的mapper.xml 文件

    4.3 给实体类起别名。

注意:

       1:普通web项目的mybatis-config.xml 的位置放在 src/config 下,mavne项目配置在src/main/resources下面

       2:实体类的mapper.xml 文件放在mavne项目要放在 src/main/resources

---------------------------------------

 MyBatis 传参数如 map 怎么传?https://blog.csdn.net/earthhour/article/details/79635633

  mapping:

  <update id="publishT00_notice" parameterType="Map">

    update test set createdate = #{createdate}, creator = #{creator} where id in 

    <foreach collection="ids" item="ids" separator="," open="(" close=")"> 

      #{ids} 

    foreach> 

  update>

  -----------------------

    HashMap map = new HashMap();

    map.put("creator", "creator");

    map.put("createdate", "createdate");

    String[] ids = {"1","2"};

    map.put("ids", ids );


29:spring 的注解有哪些?springMVC的注解,hibernate的注解,mybatis 注解? 

Hibernate常用注解

  1 类级别注解:

    @Entity:表示映射一个实体类

    @Table表示实体对应数据库表的信息

  2 属性级别注解

    @Id:必须的,定义映射到数据库表的主键属性, @Column描述了数据库表中该字段的详细。

    @GeneratedValue@GeneratedValue(strategy=GenerationType,generator=""):可选,用于定义主键生成策略strategy表示主键生成策略,取值有: GenerationType.AUTO:根据底层数据库自动选择(默认)

    @Column描述了数据库表中该字段的详细定义 

    name:可选,表示数据库中该字段的名称

    unique:可选,表示该字段是否是唯一标识,默认为false

---------------------------------------------------------------------------------------

Springmvc 常用注解

  @RepositoryDao实现类进行注解 (特殊的@Component)

  @Service 用于对业务逻辑层进行注解, (特殊的@Component)

  @Controller 用于控制层注解

  @RequestMapping:用于处理请求地址映射,可以作用于类和方法上。

    1 value:定义request请求的映射地址

    2 method:定义地request址请求的方式,包括【GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.】默认接受get请求,如果请求方式和定义的方式不一样则请求无法成功。

    3 params:定义request请求中必须包含的参数值。

    4 headers:定义request请求中必须包含某些指定的请求头,如:RequestMapping(value = "/something", headers = "content-type=text/*")说明请求中必须要包含"text/html", "text/plain"这中类型的Content-type头,才是一个匹配的请求。

    5 consumes:定义请求提交内容的类型。

    6 produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

  @RequestParam:用于获取传入参数的值

    1 value:参数的名称

    2 required:定义该传入参数是否必须,默认为true,(和@RequestMappingparams属性有点类似)

  @RequestBody

    该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上

  @ResponseBody

     该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区

  @ModelAttribute    

    在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法

    在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中 

  @RequestParam 在处理方法入参处使用 @RequestParam 可以把请求参 数传递给请求方法

  @PathVariable   绑定 URL 占位符到入参

  @ExceptionHandler 注解到方法上,出现异常时会执行该方法

  @ControllerAdvice  使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常

-----------------------------------------------

Spring 常用注解

  @Controller只是定义了一个控制器类

  @ Service  标注业务层组件

  @Repository 标注数据访问DAO组件

  @Autowired 按照Type 注入

  @Scope  用于指定scope作用域的(用在类上)默认为 singleton

备注:用注解来向Spring容器注册Bean。需要在applicationContext.xml中注册pagkage1[,pagkage2,,pagkageN]/>

-------------------------------------------

Mybatis 常用注解

  基本注解

@Insert 简单插入

@Update 简单更新

@Delete 简单删除

@Select 简单查询

@Result()实现结果集封装

@Results() 可以与@Result 一起使用,封装多个结果集

高级注解  允许创建动态SQL

@SelectProvider  

@InsertProvider

@UpdateProvider

@DeleteProvider 


30:线程的几种状态?start()与 run( ), wart() 与sleep()区别?如何唤醒 sleep 方法

  sleep来自Thread类,和wait来自Object类调用sleep()方法的过程中,线程不会释放对象锁。而 调用 wait 方法线程会释放对象锁 .sleep睡眠后不出让系统资源,wait让出系统资源其他线程可以占用CPU

  sleep(milliseconds)需要指定一个睡眠时间,时间一到会自动唤醒


31:Jvm 内存如何划分?分别存储那些数据?  堆区,方法区,栈区   见51题

32:String s=“abc” 与  String s= new String("abc"); 创建几个对象?java笔试面试题总结_第6张图片

33:java 截取字符串有 substr() 的么?   没有

34:string 的常用方法有哪些?

  length():求字符串的长度

  indexOf():求某个字符在字符串中的位置    str1.indexOf("c") 

equals():比较两个字符串是否相同

replace():将字符串中的某些字符用别的字符替换掉   str3.replace("aa","bb"),bb取代aa 

substring():输出一个新的字符串,它是此字符串中的子串,形如substring(3,7);它将字符串中的第四个第五个第六个输出。

trim():将字符串开头的空白(空格)和尾部的空白去掉。

toLowerCase():将字符串中所有的大写改变成小写

toUpperCase():将字符串中所有的小写改变为大写

split():根据给定正则表达式的匹配拆分此字符串

charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1


35:怎么定义一个数组?int  或String 类型的?

   int anArray2 = new int[10] ;int [] intArr= {1,2,3,4};    int [] inta1= {};String 同int 


 36:Servlet 的生命周期?

  加载 Servlet的 class实例化 Servlet----->调用 Servlet的 init完成初始化---->响应请求(Servlet的 service方法)调用doget()或dopost()方法----->Servlet容器关闭时(Servlet的destory方法)


 37:各种类型的转换    

java笔试面试题总结_第7张图片

38:Jsp 中的@include  


 39:虚拟机加载类的过程  

  当java编译器将.java文件编译成.class文件后,需要JVM执行.class文件,将class文件加载到内存中,从而对数据进行校验、解析和初始化


 40:TCP协议,通信


 41:数据的装箱与拆箱? int 与Integer 区别?

    1  Integer 是 int 包装类,int 是八大基本数据类型之一

  2、Integer 是类,默认值为null,int是基本数据类型,默认值为0;

  3、Integer 表示的是对象,用一个引用指向这个对象,而int是基本数据类型,直接存储数值


42:JDK和CGLIB生成动态代理类的区别:

       JDK动态代理只能针对实现了接口的类生成代理(实例化一个类)。此时代理对象和目标对象实现了相同的接口,目标对象作为代理对象的一个属性,具体接口实现中,可以在调用目标对象相应方法前后加上其他业务处理逻辑
CGLIB是针对类实现代理,主要是对指定的类生成一个子类(没有实例化一个类),覆盖其中的方法


43:SpringMVC与Struts2区别与比较总结   https://blog.csdn.net/chenleixing/article/details/44570681

44:post与get的区别  ?

java笔试面试题总结_第8张图片

45:Override和Overload的含义以及区别 java笔试面试题总结_第9张图片 

46:内存溢出是什么? 对象有被指向的引用,但是再也用不到它就是内存溢出了


47:class Number{

  int i;
  };
public class TestCommonClass {
  public static void main(String[] args) {
  Number n1 = new Number();
  Number n2 = new Number();
  n1.i=9;
  n2.i=47;
  System.out.println("n1.i:"+n1.i+",n2.i:"+n2.i);
  n1=n2;
  System.out.println("n1.i:"+n1.i+",n2.i:"+n2.i);
  n1.i=27;
  System.out.println("n1.i:"+n1.i+",n2.i:"+n2.i);
  }

  } 

    结果:

  n1.i:9,n2.i:47
  n1.i:47,n2.i:47
  n1.i:27,n2.i:27


48:public class TestHelloString {

public static void main(String[] args) {

String s1="Hello";
String s2="Hello";
String s3="Hel"+"lo";
String s4="Hel"+new String("lo");
String s5=new String("Hello");
String s7="H";
String s8="ello";
String s9=s7+s8;

System.out.println(s1==s2);//true
System.out.println("s1.equeals s2:"+s1.equals(s2));//true
System.out.println(s1==s3);//true
System.out.println("s1.equeals s3:"+s1.equals(s3));//true
System.out.println(s1==s4);//false
System.out.println("s1.equeals s4:"+s1.equals(s4));//true
System.out.println(s1==s5);//false
System.out.println("s1.equeals s5:"+s1.equals(s5));//true
System.out.println(s1==s9);//false
System.out.println("s1.equeals s9:"+s1.equals(s9));//true
System.out.println(s4==s5);//false
System.out.println("s4.equeals s5:"+s4.equals(s5));//true

}}


49:public class TestDoWhile {

  public static void main(String[] args) {
  int x=0;
  int y=10;
  do{
    y--;
    x++;
  }while(x<5);
  System.out.println(x+","+y);
  }}  答案: 5,5


50:编译失败   compilation fails 

51:Jvm 的内存分布?   

栈:数组引用,局部变量,对象的引用。

堆区:存储对象本身的以及数组,实例变量。

方法区:存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等


 52:关于静态代码块,实例代码块, 父类构造方法,子类构造方法, 静态变量,变量的加载顺序?

public class TestMethodCiXu extends Test1{
  static{
  new Print("a");
  }
  public static Print obj1=new Print("b");
  public Print obj2=new Print("c");
  public TestMethodCiXu(){
  new Print("d");
}
public static Print obj3=new Print("e");
public Print obj4=new Print("f");
public static void main(String[] args) {
TestMethodCiXu obj1 = new TestMethodCiXu();
System.out.println("----------------------");
TestMethodCiXu obj2 = new TestMethodCiXu();

}}

class Test1{
public static Print obj1=new Print("1");
public Print obj2=new Print("2");
public static Print obj3=new Print("3");
static{
new Print("4");
}
public static Print obj4=new Print("5");
public Print obj5=new Print("6");
public Test1(){
new Print("7");
}
}
class Print{
public Print(String s){
System.out.print(s+"");
}

总结:  加载顺序  第一次创建对象: 1:先父类 ,再子类, 2     父类  静态变量/静态代码块    >  子类  静态变量 / 静态代码块 > 父类   变量  > 父类 无参构造>子类  变量 >子类 无参构造   第二次加载: 1:静态变量与静态代码块不执行。2  父类变量> 父类构造方法 > 子类 变量> 子类构造方法 


53:Spring Bean 的生命周期?


54:runtimeException 有哪些?  

NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常


55:编译异常IOException、SQLException

56:Servlet 的生命周期,及servlet 的单实例,只能创建一个对象,用到了单例,模板设计模


 57:spirng 有哪些模块? Aop  ORM, DAO,CORE ,WEB,MVC,CONTEXT


 58:hibernate 拒绝连接,服务器崩溃的原因有哪些? 

  1:driver,url, pw 错误,2,db 没开  3.网络问题 4.服务器连接人数有限制


 59:hibernate 与 mybatis 的区别?

          Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。 
         Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 
       Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。 
总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。


 60:oracle 与 MySQL的区别?        https://www.cnblogs.com/TaoLeonis/p/7043543.html

MysqlOracle 的对比

区别点

Mysql

Oracle

数据类型

CHAR:定长字符串,适合主键

VARCHAR:变长字符串

FLOAT,     数值型

 DOUBLE,  数值型             

DATE ,      日期型         

 INT         整型  

字符类型 char 定长字符类型 varchar可变长的字符类型  varchar2 可变长的字符类型

二进制大对象 BLOB 主要用来存储图片,音频,视频....

文本大对象 CLO主要用来存放大文本

Date

数字类型 number

主键自动增长

Auto_increment 主键必须是整型才可以自增长

如creat TABLE t1 (tid INT (10) PRIMARY KEY auto_increment,

tname varchar (10),tage int(2));

Oracle 中给主键设置自增长,先设序列,在设置触发器.

单引号的处理

 MYSQL里可以用双引号包起字符串,

ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号

分页

limit是mysql的语法
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。limit 2,4
即取出第3条至第6条,4条记录

Oracle 中用rownum .取前n条数据,oracle中用rownum < m;

1:其中m-1 等于要取的条数

2:rownum 只能有 < ,<= ,没有 >

3: 如m为6,则取得是前5条数据。

 日期字段

MYSQL日期字段分DATE和TIME两种

ORACLE日期字段只有DATE,包含年月日时分秒信息

空字符的处理

MYSQL的非空字段也有空的内容

如:name != ""这样在mysql下不会报错

ORACLE里定义了非空字段就不容许有空的内容 。 如果为NULL或空字符,需要把它改成一个空格的字符串。如:oracle下的要换成name is not null 

Sql语句group by

Mysql不要求group by 后的字段 一定要出现在select 后面。

oracle中sql 的group by 后的字段 一定要出现在select 后面

开源项目

MySQL是开源的项目

付费

SQL语法的不同

MySQL较为灵活

Oracle较为严格

 

 

 

事务

事务的提交

MySQL默认是自动提交

 

Oracle默认不自动提交,需要用户手动提交

 

事务隔离级别

MySQL是可重复读

 

读已提交

对事务的支持

MySQL在innodb存储引擎的行级锁的情况下才可支持事务

Oracle则完全支持事务

 

保存数据的持久性

MySQL是在数据库更新或者重启,则会丢失数据

Oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复

用户权限

放在mysql 自己的mysql 库中

oracle 的权限是跟着表空间走的


 61:& 与&& 的区别?  

  首先记住&是位操作,而&&是逻辑运算符。另外需要记住逻辑运算符具有短路特性,而&不具备短路特性


 62:springmvc 的工作流程? 

1用户发起请求到前端控制器(DispatcherServlet)

2 前端控制器会找到处理器映射器(HandlerMapping)通过HandlerMapping完成url到controller映射的组件,找到handler,返回给dis。

3 前端控制器 找到 处理适配器HandlerAdapter,访问处理器,并执行,

4 执行处理器得到mv,最终返回给 前端控制器

5 前端控制器 请求 视图解析器vr,得到视图对象,vr根据名称得到页面, 返回给前端控制器

6 前端控制器 进行视图渲染,返回给用户


63:struts2 的mvc 模式?


 64:hibernate的并发模式?怎么去处理并发问题? 

  Hibernate的Session对象是非线程安全的, 即单个事务 ,它通常只使用一次, 然后就丢弃。当多个事物并发访问同一个资源会引发一系列的问题。

  解决方法:

  1  设置事务隔离级别。 
  2  Serializable:串行化。隔离级别最高 

   3 设置锁:乐观锁和悲观锁


65:sql 的怎么优化?

  1 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

  2: 应尽量避免在 where 子句中对字段进行 

    2.1 null 值判断 

    2.2 使用!=或<>操作符

    2.3用 or 来连接条件

    2.4 like '%abc%' 

    2.5  表达式操作 如:where num/2=100

    2.6  函数操作  如: where substring(name,1,3)='abc'

    2.7 in 和 not in,否则将导致引擎放弃使用索引而进行全表扫描.

  3.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致.

  4.很多时候用 exists 代替 in 是一个好的选择

  5.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率

  6.尽可能的使用 varchar 代替 char,尽量使用数字型字段.

  7.任何地方都不要使用 select * 

  8.避免频繁创建和删除临时表,以减少系统表资源的消耗

  9.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表

  10 在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,  
以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert

  11 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定

  12.尽量避免使用游标,因为游标的效率较差, 尽量避免大事务操作,提高系统并发能力

  13.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理


 66:hibernate 自带的分页是什么?,若不用它,采用什么分页?


 67:session 与cooker的区别,原理?

1cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据

2session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了。

3cookiesession的共同之处在于:cookiesession都是用来跟踪浏览器用户身份的会话方式。

4cookie session的区别是:cookie数据保存在客户端,session数据保存在服务器端。

5session工作原理:session技术中所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登录或具有某种权限


 68:web 项目下- web app libraries 怎么来的?  lib 下的jar 包引进了后,自动生成的


69:关于java 中的 值传递

public class Example {

  String str = new String("good");

  char[] ch = { 'a', 'b', 'c' };

  public static void main(String args[]) {

    Example ex = new Example();

    ex.change(ex.str, ex.ch);

    System.out.print(ex.str + " and ");

    System.out.print(ex.ch);

}

public void change(String str, char ch[]) {

  str = "test ok";

  ch[0] = 'g';

  } 

答案:  good and gbc   

因为在java里没有引用传递,只有值传递

  这个值指的是实参的地址的拷贝,得到这个拷贝地址后,你可以通过它修改这个地址的内容(引用不变),因为此时这个内容的地址和原地址是同一地址,但是你不能改变这个地址本身使其重新引用其它的对象,也就是值传递 


70: 抽象类与抽象方法关系? 

   抽象类中的抽象方法没有方法体。1.抽象类与抽象方法的关系是:抽象方法必须在抽象类中,如果抽象方法不在抽象类中,则会编译报错,这个是规定的。2.抽象类中的方法不一定要必须是抽象方法,可以有抽象方法,和非抽象方法。其中非抽象方法,往往都是抽象类的所有子类所具有的,而抽象方法则由具体的不同子类实现不同的方法


71:抽象类和接口的区别,做个总结吧:

java笔试面试题总结_第10张图片


 72: notify()  与notifyAll()的区别   

   如果线程调用了对象的 wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。当有线程调用了对象的 notifyAll()方法(唤醒所有 wait 线程)或 notify()方法(只随机唤醒一个 wait 线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。也就是说,调用了notify后只要一个线程会由等待池进入锁池,而notifyAll会将该对象等待池内的所有线程移动到锁池中,等待锁竞争


73:如何建立索引。mysql,Oracle中呢?

  什么样的字段应该创建索引呢?

1.该字段中存储的数据库量比较大
2.该字段的数据很少执行DML操作( update,insert)
3.该字段经常出现在查询条件中(也就是WHERE子句)

---------------------------------------------------------------

Mysql

为什么使用索引?

  如果未使用索引,不得不首先以第一条记录开始,然后读完整个表直到它找出相关的行.

索引分类?

  PRIMARY:主键索引。索引列唯一且不能为空;一张表只能有一个主键索引(主键索引通常在建表的时候就指定)
  NORMAL:普通索引。索引列没有任何限制;
  UNIQUE:唯一索引。索引列的值必须是唯一的,但允许有空;

怎么创建.指定,删除索引?

   create index 索引名 on 表名(列名); 

  ALTER TABLE 表名 ADD 索引名(列名)

  DROP INDEX 索引名 ON 表名

注意事项

  只要列中包含NULL值将不会被包含在索引中,组合索引只要有一列含有NULL值,那么这一列对于组合索引就是无效的


oracle

  创建索引:create index 索引名 on 表名(列名); 

  删除索引:DROP INDEX 索引名


74:java与js中字符串截取substring() 与substr()方法区别

substring 与substr 区别

 

JAVA

JS

例如: var str=“Olive”

    1 Str.substring(3,4); 

2  Str.substr(3,4);

总结

JAVA

JS

substring(start,end)

下标

 

1:参数:12

2:第一个参数表示从第几位下标开始, 第二位代表下标

1:参数:12

2:第一个参数表示从第几位下标开始, 第二位代表下标

“v”

“v”

1JSJAVA的截取字符串substring()使用方法一样

2java没有substr()的使用方法

3注意:2个方法的下标开始位置都是0.

4:方法只有一个参数时,两个方法用法一致,即从该下标开始截取到字符串尾。java与js中都一样

 

Substr(a,b)

长度

 

 无该方法

1:参数 12

2:第一个参数表示从第几位下标开始,第二位代表长度

 

 

“ve”



76:char型变量中能不能存贮一个中文汉字?为什么? 

    char型占两个字节16位,一个汉字占用两个字节,java默认采用unicode编码,一个Unicode码是16位,所以java中能char类型能存一个汉字


77:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 

   使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的


 78:请说出作用域public,private,protected,以及不写时的区别   

   private<  friendly  < protected <  public


79:线程的几种状态:

  新建、就绪、运行、阻塞、死亡 


80:多线程都有哪些常用方法?如何使用?      

   sleep()  使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁

   yield()   该方法与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会。

   wait() 方法使当前线程暂停执行并释放对象锁标示 ,让其他线程可以进入synchronized数据块

   notify()方法  notifyAll()

   Run()start()   把需要处理的代码放到run()方法中  start()方法启动线程将自动调用run()方法,这个由java的内存机制规定的。并且run()方法必需是public访问权限,返回值类型为void。

  wait()和notify(),notifyAll()是Object类的方法,sleep()和yield()是Thread类的方法

  interrupt() 中断线程。

   isAlive() 测试线程是否处于活动状态


81:String s1 = "Programming";

  String s2 = new String("Programming");
  String s3 = "Program" + "ming";
  System.out.println(s1 == s2);   //false
  System.out.println(s1 == s3);   //true


82:    int i = 1;   int j;   j = i++;  j++;      int m=++i; 

  System.out.println("i: "+i);//3
  System.out.println("j: "+j);//2
  System.out.println("m: "+m);//3


83:将 两个字符串数组放到一个新字符串数组中。 

  String[] str1 = {"Hello","world","java"};
  String[] str2 = {"Veriable","syntax","interator"};
  String[] both = (String[]) ArrayUtils.addAll(str1, str2);
  System.out.print(both);


84:实体类书写规范

1.实现 Serializable 接口
2.提供一个无参构造
3 对私有属性,提供访问方法。
4.重写 equals 方法 toString()方法

 85 代码中如何实现多态

实现多态主要有以下三种方式:

1. 接口实现 
2. 继承父类重写方法 
3. 同一类中进行方法重载


 86    多态的好处

  1. 可替换性:多态对已存在代码具有可替换性

  2. 可扩充性:增加新的子类不影响已经存在的类结构

  3. 接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的。

  4. 灵活性

  5. 简化性


87 java 创建对象有几种方式? 

1:采用new

2:通过反射

3:采用clone

4:通过序列化机制


88  final, finalize和finally的不同之处

  final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该变量的值在初始化后不能被改变。finalize 方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。finally 是一个关键字,与 try 和 catch 一起用于异常的处理。finally 块一定会被执行,无论在 try 块中是否有发生异常


89  如何判断一个对象是否应该被回收? 对象可达性分析


90  调用System.gc()会发生什么?  通知GC开始工作,但是GC真正开始的时间不确定。


91  为什么wait()方法和notify()/notifyAll()方法要在同步块中被调用

  这是JDK强制的,wait()方法和notify()/notifyAll()方法在调用前都必须先获得对象的锁


 92:@Autowired 与@Resource 的区别?

  1:autowired spring提供,按类型进行装配,2 resource j2ee 提供,按名称装配。


 93:如何解决hibernate中,懒加载load方法出现,no session的错误? 

   解决:web.xml中配置一个OpenSessionInViewFilter过滤器,注意,这个一定要配置在strus2/springMVC 的核心过滤器前面


94:如何解决Hibernate中出现并发所引起的数据库内容读取问题,如何进行解决?  

   采取悲观锁与乐观锁的机制来解决这个问题 ,悲观锁---------锁的粒度为数据库   sql 后+ for update , 乐观锁---锁的粒度为表  


95:Hibernate有哪几种查询数据的方式?

  3种,hql、条件查询QBC(QueryBy Criteria)、原生sql (通过createSQLQuery建立)


96:hibernate中get和load方法区别?

1)get如果没有找到会返回null, load如果没有找到会抛出异常。

2)get会先查一级缓存, 再查二级缓存,然后查数据库;load会先查一级缓存,如果没有找到,就创建代理对象, 等需要的时候去查询二级缓存和数据库。


97:如何解决servlet单例问题造成的线程不安全 

  把这个成员变量改成局部变量,那么所有的线程都会有一份,不会造成线程安全


 98:分布式通信Webservies?Webservies(=wsdl+soap)

异构系统间的通信。客户端存根与服务端骨架的通信,使用axis 等服务。

Wsdl  Webservies描述语言

Soap  面向对象的通信协议。(Http+xml)

Uddi: 目录(用不上)

Webservices 静态调用 (在客户端生成存根文件)项目应用步骤:

1:将axisjar包  放到 tomcat/webapps/

2:将wsdl服务保存成xml文件,保存到包中

3:可以使用批处理命令,将axisjar 加到环境变量classpath 中。将wsdl2java。放到src

4cmd 执行批处理命令。刷新项目。生成存根文件

5:根据存根文件,调用接口,即可实现异构系统的通信


99:jsp和servlet 的区别,共同点,使用场景? 

       JSP在本质上就是SERVLET,Servlet完全是JAVA程序代码构成,采用Servlet来控制业务流程,而采用JSP来生成动态网页,JSP侧重于视图,Servlet主要用于控制逻辑。


100 springboot 怎么用 ?

  Spring Boot 整合了所有的框架.  \

    二:Spring Boot的基础结构共三个文件:

 1:src/main/java  程序开发以及主程序入口

 2:src/main/resources 配置文件

 3:src/test/java  测试程序

spingboot建议的目录结果如下: 

  project

      Application.java

      + -  domain

                 +- Customer.java

            +- CustomerRepository.java
       +- service
          +- CustomerService.java
       +- controller
          +- CustomerController.java

1、Application.java 建议放到跟目录下面,主要用于做一些框架配置

2、domain目录主要用于实体(Entity)与数据访问层(Repository)

3、service 层主要是业务类代码

4、controller 负责页面访问控

--------------------------------------------------------------------------------------    

三:使用环境:   

 1:若使用的是eclipse ,需安装插件Spring tool suite(sts),若使用的是idea旗舰版,idea 自带了springboot 插件。

    2: 推荐使用maven3+,java8
  使用的问题:
  注意:
    1:在idea中创建springboot 项目时,一定要配置maven 的安装路径,
      setting 的覆盖路径,本地maven 路径。否则注解引不进来。
   2:springboot的 ***Application.java 文件要与controller,service,domain
    的包在同一级下,因为启动***application的main方法后,要扫描注解。
      @SpringBootApplication
springboot 的核心注解,开启spring自动配置。
-----------------------------------
四:springboot 开发web项目的pom.xml 配置
4.0.0

com.bj.boot2
boot2
1.0.0



org.springframework.boot
spring-boot-starter-parent
2.1.6.BUILD-SNAPSHOT




boot2
Demo project for Spring Boot


1.8





org.springframework.boot
spring-boot-starter-web



org.springframework.boot
spring-boot-starter-test
test







org.springframework.boot
spring-boot-maven-plugin



--------------------------------------
 
五:springboot 核心配置文件:(
配置端口,上下文等 )

配置位置:src/main/resources/

方式:两种:application.propertis,或 application.yml .

注意:application.yml 配置时的空格问题。两个格式同时用时 application.propertis 优先.

多环境配置:

如:resources下有  application.propertis  application-test.propertis application-dev.propertis 多环境下使用时,可以在application中激活用哪个,spring.profiles.active=dev/test 就可以了

-------------------------------------------------------------------------------------

六:springboot 下的springmvc 常用注解:

@Controller   

@ResponseBody

@GetMapping: get请求+requestMapping   

@PostMapping: Post请求+requestMapping  

@RestController: 返回的一定是字符串或json数据,是@Controller和 @ResponseBody 注解的组合注解.

-------------------------------------------------------------------------------

七:idea 中Jsp 的开发配置:

  1:pom.xml 引jsp的依赖,4个。

  2:application.properties 下配置jsp 的前后缀。

  3:在main下创建webapp 文件夹,webapp下放jsp.

  4:在pom.xml >build> 添加 resources 标签依赖,用于webapp/jsp 的路径指引,idea 中需要配,eclipse 中不需要配(注意) 

  5:正常开发JspController .

---------------------------------------------------------------------------------------

 八:idea 中对事物的管理。

   1:在springboot 的入口***application.java 上加  @EnableTransactionManagement开启事物

     2: 在具体的业务层service层的方法上加上@Transactional.

  注意:springboot中service层的方法上若不加事物(如update方法),则方法中若存在运行时异常,数据照样commit。加上事物后,则数据库数据不会更新

----------------------------------

 九:springboot 的热部署

  热部署指的是修改代码后,服务器自动加载修改的代码,提高开发效率。

  在pom.xml 添加 spring-boot-devtools 的插件。

  注意:使用中出现明明已启动,没生效,这时手动启动程序。

 ------------------------------------------------------------------------------------------

十:springboot 中的servlet使用。

  1:在servlet类上加上@webservlet("urlPatterns="servlet 映射路径"")、

  2:在****application的类上加servlet的扫描注解。@ServletConpentScan(basePackages="servlet的路径")。

-----------------------------------------------------------------------

十一:springBoot 中开发非web项目。

  Java项目 步骤:new project/module> springboot> core>finish.

  启动java项目:springbootContext.getBean("类");得到类对象,再调方法,启动run

  注意:java项目创建时不要选web,则pom.xml 中的starter-web的web就没有了,就成了springboot开发java项目的依赖。

 ---------------------------------------------------------------------------------------------

十二:springboot中web项目打war/jar 包。

  打war包:

    1: ***application.java 继承 springbootServletInitializer, 覆盖 一个方法。

    2:pom.xml 中的打包方式改为war

    3.pom.xml 配置maven的打包插件。

    4.运行maven install,成功后在pom.xml 的打包路径下看到    ...........war 文件.

  打jar包:

    1:pom.xml 中的打包方式改为jar.

    2.pom.xml 配置maven的打包插件。

    3:运行maven install,成功后在pom.xml 的打包路径下看到    ...........jar 文件

   注意:打 jar包时,maven的打包插件使用 1.4.2 的版本 。其他的版本暂时打 jar包都有点问题。

 -----------------------------------------------------------------------------------------

十三:jar/war 包上线部署

  1:可以将jar/war 放到tomcat的webapps 下部署。

  2:可以将war 放到Linux 下的shell 脚本下执行。


 101 ngnix? 

1、请解释一下什么是Nginx

Nginx是一个web服务器和方向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。

2请解释Nginx如何处理HTTP请求。

Nginx使用反应器模式。主事件循环等待操作系统发出准备事件的信号,这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。单个线程可以提供数万个并发连接。

 3 使用“反向代理服务器”的优点是什么?

反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用web托管服务时。

4请列举Nginx服务器的最佳用途。

Nginx服务器的最佳用法是在网络上部署动态HTTP内容,使用SCGI、WSGI应用程序服务器、用于脚本的FastCGI处理程序。它还可以作为负载均衡器。

5 请解释Nginx服务器上的Master和Worker进程分别是什么?

Master进程:读取及评估配置和维持

Worker进程:处理请求

6请解释是否有可能将Nginx的错误替换为502错误、503?

502 =错误网关

503 =服务器超载

7 nginx常用命令
启动nginx  ./sbin/nginx
停止nginx ./sbin/nginx -s stop    ./sbin/nginx -s quit
重载配置  ./sbin/nginx -s reload(平滑重启)  service nginx reload 
重载指定配置文件 ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看nginx版本 ./sbin/nginx -v
检查配置文件是否正确 ./sbin/nginx -t
显示帮助信息 ./sbin/nginx -h

8 nginx状态码

499:服务端处理时间过长,客户端主动关闭了连接
9 nginx功能
作为http server(代替apache,对PHP需要FastCGI处理器支持)
反向代理服务器
实现负载均衡
虚拟主机
10 502错误可能原因
(1).FastCGI进程是否已经启动
(2).FastCGI worker进程数是否不够
(3).FastCGI执行时间过长
11ignx配置
worker_processes  8;     工作进程个数
worker_connections  65535;  每个工作进程能并发处理(发起)的最大连接数(包含所有连接数)
listen       80;                                            监听端口
server_name  rrc.test.jiedaibao.com;       允许域名
12 nginx和apache的区别

轻量级,同样起web 服务,比apache 占用更少的内存及资源 
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单 
最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 
13 
【试题1】缺省安装的 nginx + php-fpm 环境,假设用户浏览一个耗时的网页,但是却在服务端渲染页面的中途关闭了浏览器,那么请问服务端的 php 脚本是继续执行还是退出执行?

【解答】正常情况下,如果客户端client异常退出了,服务端的程序还是会继续执行,直到与IO进行了两次交互操作。服务端发现客户端已经断开连接,这个时候会触发一个user_abort,如果这个没有设置ignore_user_abort,那么这个php-fpm的程序才会被中断。

14【试题2】首先,Nginx 日志格式中的 $time_local 表示的是什么时间?请求开始的时间?请求结束的时间?其次,当我们从前到后观察日志中的 $time_local 时间时,有时候会发现时间顺序前后错乱的现象,请说明原因。

【解答】$time_local:在服务器里请求开始写入本地的时间,因为请求发生时间有前有后,所以会时间顺序前后错乱


102 jquery 有哪些选择器? 

一.基本选择器
    $("#test")      选择id值为test的元素,id值是唯一的所以返回单个元素。
    $("div")         选择所有的div标签元素,返回div元素数组
    $(".myclass")     选择使用myclass类的css的所有元素
    $("*")            选取所有元素。
    $("#test,div,.myclass")    选取多个元素

----------------------------------------------------------------------

二 .层次选择器
    $("div span")         选取

里的所有元素
    $("div >span")       选取
元素下元素名是的子元素
    $("#one +div")       选取id为one的元素的下一个
同辈元素等同于$("#one").next("div")
    $("#one~div")   选取id为one的元素的元素后面的所有
同辈元素等同于$("#one").nextAll("div")
    $("#one").siblings("div")   获取id为one的元素的所有
同辈元素(不管前后)
    $("#one").prev("div")     获取id为one的元素的前面紧邻的同辈
元素
所以 获取元素范围大小顺序依次为:
$("#one").siblings("div")>$("#one~div")>$("#one +div") 或是$("#one").siblings("div")>$("#one").nextAll("div")>$("#one").next("div")

----------------------------------------------------------------------

3.1.基本过滤选择器
    $("div:first")         选取所有

元素中第1个
元素
    $("div:last")         选取所有
元素中最后一个
元素
    $("input:not(.myClass)")     选取class不是myClass的元素
    $("input:even")         选取索引是偶数的元素(索引从0开始)
    $("input:odd")        选取索引是基数的元素(索引从0开始)
    $("input:eq(2)")        选取索引等于2的元素
    $("input:gt(4)")         选取索引大于4的元素
    $("input:lt(4)")        选取索引小于4的元素
    $(":header")        过滤掉所有标题元素,例如:h1、h2、h3等
    $("div:animated")     选取正在执行动画的
元素
    $(":focus")          选取当前获取焦点的元素

---------------------------------------------------------------------

3.2.内容过滤选择器
    $("div:contains('Name')")      选取所有

中含有'Name'文本的元素
    $("div:empty")            选取不包含子元素(包括文本元素)的
空元素
    $("div:has(p)")            选取所有含有

元素的

元素
    $("div:parent")            选取拥有子元素的(包括文本元素)
元素

----------------------------------------------------------------------------------------

3.3.可见性过滤选择器
     $("div:hidden")                选取所有不可见的

元素
       $("div:visible")                 选取所有可见的
元素

----------------------------------------------------------------------------------------

3.4 属性过滤选择器
    $("div[id]")                 选取所有拥有属性id的元素
    $("input[name='test']")          选取所有的name属性等于'test'的元素
    $("input[name!='test']")         选取所有的name属性不等于'test'的元素
    $("input[name^='news']")        选取所有的name属性以'news'开头的元素
    $("input[name$='news']")        选取所有的name属性以'news'结尾的元素
    $("input[name*='news']")        选取所有的name属性包含'news'的元素
    $("div[title|='en']")        选取属性title等于'en'或以'en'为前缀(该字符串后跟一个连字符'-')的

元素
    $("div[title~='en']")           选取属性title用空格分隔的值中包含字符en的
元素
    $("div[id][title$='test']")          选取拥有属性id,并且属性title以'test'结束的
元素

-------------------------------------------------------------------------------------------

3.5.子元素过滤选择器
    $("div .one:nth-child(2)")      选取class为'one'的

父元素下的第2个子元素
    $("div span:first-child")         选取每个
中的第1个元素
    $("div span:last-child")         选取每个
中的最后一个元素
    $("div button:only-child")      在
中选取是唯一子元素的