面试题整理

一。java面试题:
--------------------------前端开发------------------------------- 
1.js创建对象的几种方式?
  Object构造函数创建:var Person = new Object();
  使用对象字面量表示法: var Person = {};
  使用构造函数创建对象: function Person(){};
  原型创建对象模式:prototype
2.url传递中文参数如何编码,后台如何解码?
  前台:encodeURI(encodeURI())   
  后台:URLDecoder.decode("","utf-8"); 
3.谈谈你对ajax的认识?
  Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少大用户下的服务器负载,
  可也实现局部刷新,在不更新整个页面的前提下维护数据,提升用户体验度
4.js如何处理异常? 怎么调试js代码?
  try-catch,  F12用IE或chrome等浏览器自带的调试工具即可。    
5.是否使用过bootstrap,为什么使用bootstrap?
      Bootstrap具有移动设备优先、浏览器支持良好、容易上手、响应式设计等优点,所以Bootstrap被广泛应用。 
  你还使用过哪些前段UI框架?
      easyUI等。  
6.js字符串比较问题: 
  222 <  '30'  结果: false
  222 < 'abc'  结果:false
  '222' < '30' 结果:true
7.js如何遍历对象属性值?
  for(i in myDog){
      alert(myDog[i]);
  }  
8.setTimeout 和 setInteval 是干什么的? 设定定时任务后怎么取消它?
  设置某段时间后执行和设置间隔多久后循环执行。
  clearTimeout和clearInteval
9.js对象是否可以先使用后定义? 如果可以使用时它的值是什么?
  可以, 值是undefined
10.用到过nodeJs的哪些库? 
   express,Electron,passport,gulp
   express是什么框架?Electron是什么框架?
   express:Web应用程序开发框架。
   Electron:构建桌面应用框架。
11.什么是vue.js?
       是一套构建用户界面的渐进式框架
  它的核心思想是什么?
       它是以数据驱动和组件化的思想构建的,你无需手动操作DOM。它通过一些特殊的HTML语法,将DOM和数据绑定起来。
       一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应地更新。
12.如何解决ajax跨域问题?
  1.使用JSONP解决AJAX跨域问题,这种方式只能处理get请求跨域,其本质是通过js的跨域性能解决。    
  2.使用CORS解决AJAX跨域的问题,能处理get和post请求,但只有较为先进的浏览器才能全面支持CORS。
13.如何修改浏览器alert、confirm、open、dailoag等弹出框样式,你用过哪些组件?
   最好用组件,jquery、layer等,答案不唯一。
14.如何解决发版后客户端浏览器js或css缓存不更新问题?
       更改加载的js或css文件的版本号,使客户端浏览器认为是一个新的请求从而强制加载。
   如果是更改js或css文件的版本号,如何批量做(项目中js和css的引入很多,不可能一个个调整)?
       可以使用gulp前端构建工具,以js文件或css文件的md5加密串来作为引入其的版本号,这样当文件有变动时版本号跟着变。
15.js中如何判断一个变量的类型?
      用typeof运算符
  如何判断一个变量是否某个对象的实例?
      使用instanceof 
16.如果页面上引入的js、css文件较多,怎么合并这些文件请求从而加快网页响应速度?
       使用minify可以合并这些请求。
   网页上的按钮及其他导航图片,如何用一次请求全部获取?
       可以使用CSS Satyr将按钮及其他导航图片等多个小图片整合成一张图片并生成相应的CSS调用代码,页面加载时只请求这张图片,使用时附上相应的样式即可(思路对即可)。
17.写一个function,清除字符串前后的空格。
   if (!String.prototype.trim) { 
       String.prototype.trim = function() { 
          return this.replace(/^\s+/, "").replace(/\s+$/,"");

       } 
   }
18.js延迟加载的方式有哪些?
   1.defer和async
   2.动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)
   3.按需异步载入js 
19.在JS中有哪些会被隐式转换为false?
   Undefined、null、关键字false、NaN、零、空字符串   
20.如果需要在java后台执行js代码怎么处理?
   可以使用jdk提供的javascript执行引擎ScriptEngine实现。   
21.为什么要使用jquery,你觉得jquery有什么好处?
   因为jQuery是轻量级的框架,大小不到30kb,它有强大的选择器,出色的DOM操作的封装,有可靠的事件处理机制(jQuery在处理事件绑定的时候相当的可靠),
   完善的ajax(它的ajax封装的非常的好,不需要考虑复杂浏览器的兼容性和XMLHttpRequest对象的创建和使用的问题。) 出色的浏览器的兼容性。
   而且支持链式操作,隐式迭代。行为层和结构层的分离,还支持丰富的插件,jquery的文档也非常的丰富。
21.你如何利用jQuery来向一个元素中添加和移除CSS类?  
  通过利用 addClass() 和 removeClass() 这两个 jQuery 方法。   
22.document.getElementbyId("myId") 和 jquery的$("#myId")哪种方式更高效?
   第一种,因为它直接调用了JavaScript引擎。   
   
   

--------------------------java开发-------------------------------    
1.简单介绍下做过哪些项目,项目开发的流程是怎么样的,你在项目中负责哪些具体工作? 
      考验语言表达能力并借此了解其职责和使用过的技术。  
  为什么说Java是一门平台无关语言?
      java最终会被编译成字节码文件交由java虚拟机执行。
      java提供了运行于各种平台的java虚拟机,所以java是一门平台无关的语言。
2.项目中主要使用了哪些框架?
  考验语言表达能力并借此了解其职责和使用过的技术。   
3.使用什么开发工具?
  MyEclipse,eclipse,IntelliJ Idea  
4.什么版本控制工具?分支有什么作用? 
  svn或者Git
  创建分支trunk出来阶段性开发不影响主干代码,开发完成后合并到主干发布。
5.用过哪些MVC框架,简单介绍下MVC的原理?
  Struts1.x, struts2,springMvc  
6.用什么框架开发的webservice服务接口?
   CXF、Axis
   用过哪些测试工具测试接口?
   soapUI、postman
   接口交互数据格式有哪些?
   xml、json、string      
7.什么是线程池?
  线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程。
  为什么要用线程池?
  减少了请求到来时创建线程和请求结束后销毁线程的耗时操作,减少请求调用时间。   
8.注解是什么,你是怎么理解的?
  注解只是一种标记,并没有实质性的含义,真正让它起作用的是注解解释类。
9.你怎么理解cookie和session,有哪些不同点?
  cookie机制采用的是在客户端保持状态的方案
  session机制采用的是在服务器端保持状态的方案。 

10.java金额计算用哪种对象?
   应该用BigDecimal    ,不能用double和float,因为它们都是浮点数。
11.int和Integer 哪个会占用更多的内存? 
       Integer 对象会占用更多的内存。Integer 是一个对象,需要存储对象的元数据。但是 int 是一个原始类型的数据,所以占用的空间更少。    
   64位JVM中,int的长度是多数?
       int 类型变量的长度是一个固定值,与平台无关,都是 32 位。 
12.ArrayList和Vector的区别?
       前者是非线程安全的,Vector里的大部分方法都做了线程安全处理,所以Vector是线程安全的。
   ArrayList用哪种遍历速度最快? (forEach,迭代器,for循环随机访问)
       for循环随机访问速度最快。
   插入数据时,ArrayList和LinkedList哪个效率高?
       要分情况,LinkedList基本上不管往哪插入数据,效率基本都是一样的。
       ArrayList要分情况,如果是末尾插入数据,则ArrayList效率比LinkedList高,越往前插效率越差,因为它内部是数据实现,需要把插入的位置以后的元素全部复制到新位置。
   能否用for循环去遍历LinkedList,为什么?
       不能,因为LinkedList在get任何一个位置的数据的时候,都会把前面的数据走一遍,数据量大的时候效率非常慢。
   为什么ArrayList的get数据是时间耗费非常稳定?
       因为ArrayList内部是数据实现,数组在内存中是一块连续的内存空间,数组中对象类型是相同的,占据的内存空间也是确定的,
       get数据时就是根据内存起始地址加偏移量找到元素位置读取即可。
14.HashMap是线程安全的么?
       不是,ConcurrentHashMap是线程安全的。 
   HashMap 的数据结构?
       哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。
   简要介绍下HashMap的get数据过程?
       首先根据key值计算出hashCode,然后根据HashMap数组长度取模得到元素数组下标,然后取出数组下标对应的Entry,即链表首项,如果
       遍历比对链表中Entry的key相同的返回。
   为什么重写equals就必须重写hashCode的?
       这两个方法其实都是Object的方法,原生Object的equals方法是==严格比较两个对象是否相等,hashCode是根据对象内存地址用哈希函数计算得出,所以equals返回true时,hashCode必然相等,
       这也是一个通用约定,即equals相等的对象hashCode必然相同。
       如果重写了equals方法,可能使两个不同内存地址的对象相等成立,但如果不重写hashCode方法,它会仍然用内存地址计算hashCode,从而得到两个不相同的hashCode,
       通用约定相违背,所以重写equals方法就必须重写hashCode方法。
   什么是hash冲突? hashMap是怎么解决hash冲突的?
       不同的key值经过hash后得到相同的hashCode。
       通过链表法解决hash冲突,将相同hashCode的entry通过next链接在一起。
   什么时候会发生hashMap的rehash?
       默认的负载因子大小为0.75,当一个map填满了75%的bucket时候会发生rehash。
   rehash的大致实现过程是怎样的?
       会创建原来HashMap大小的两倍的bucket数组,来重新调整map的大小,
       并将原来的对象放入新的bucket数组中。这个过程叫作rehashing。               
15.java实现定时任务有哪几种方式?   
   JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService
   Quartz :简单却强大的JAVA作业调度框架 
   Spring3.0以后自带的task :可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多; 
16.简述servlet的生命周期?
  web容器加载servlet,生命周期开始。
  通过调用servlet的init()方法进行servlet的初始化。
  通过调用service()方法实现,根据请求的不同调用不同的do***()方法。
  结束服务,web容器调用servlet的destroy()方法。
17.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
  JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。
  JSP侧重于视图,Servlet主要用于控制逻辑。 
18.什么是过滤器?
      过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和服务器之间的请求与响应信息,并对这些信息进行过滤。
  有哪些常见用途和用法(或者项目中哪些功能用到了过滤器)?
      对用户请求进行统一认证、
      对请求和相应参数进行编码、
      对用户的访问请求进行记录和审核、
      对用户发送的数据进行过滤或替换、
      对响应内容进行压缩以减少传输量、
      对请求或响应进行加解密处理、
      对XML的输出应用XSLT
19.用过哪些监听器,实现的什么功能?
   HttpSessionListener:用于监听Session对象的创建和销毁,监听器类需要实现。
   ServletContextListener:用于监听WEB 应用启动和销毁的事件。 
20.项目中如何进行事物管理的?
       用spring进行事物管理。
  Spring支持几种类型的事务管理?
       两种,编程式事务管理和声明式事务管理。
  程序中怎样才能使事物回滚?
       抛出一个运行时异常或在xml中指定需要回滚的异常。         
21.什么是单例模式?   
       单例模式就是为确保一个类只有一个实例,并为整个系统提供一个全局访问点的一种方法。
   单例模式的优点?
       在内存中只有一个对象,节省内存空间;
       避免频繁的创建销毁对象,可以提高性能;
       避免对共享资源的多重占用,简化访问;
       为整个系统提供一个全局访问点。
   能否写出一个效率最高的单例模式实现? 
   //静态内部类实现
    public class Singleton5 {
        // 私有内部类,按需加载,用时加载,也就是延迟加载
        private static class Holder {
            private static final Singleton5 singleton5 = new Singleton5();
        }
        private Singleton5() {
        }
        public static Singleton5 getSingleton5() {
            return Holder.singleton5;
        }
    }
   //双重检查
   public class Singleton3 {
        //使用volatile关键字防止重排序,因为 new Instance()是一个非原子操作,可能创建一个不完整的实例
        private static volatile Singleton3 singleton3;
        private Singleton3() {
        }
        public static Singleton3 getSingleton3() {
            // Double-Check idiom
            if (singleton3 == null) {
                synchronized (Singleton3.class) {       // 1
                    // 只需在第一次创建实例时才同步
                    if (singleton3 == null) {       // 2
                        singleton3 = new Singleton3();      // 3
                    }
                }
            }
            return singleton3;
        }
    }
22.XML解析通常有DOM和SAX两种方式,说说各自的解析机制?
   DOM解析是读入整个XML文件并构建一个驻留内存的树结构,通过遍历树结构可以检索任意XML节点,读取它的属性和值。
   SAX解析是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,当在读取解析过程中遇到需要处理的节点,会发出通知对其进行处理。
23.spring Ioc是什么?
        即“控制反转”,不是什么技术,而是一种设计思想。
   你如何理解IOC的“控制反转?
       传统应用程序是由我们自己在对象中主动控制去创建对象,这是正转;而Sring Ioc则把这个动作交给容器来帮忙创建及注入依赖对象;
       因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;   
   spring实现Ioc主要使用了java的哪一个机制?
       使用了java的反射机制,解析xml配置的类路径通过反射创建类的对象。
24.开发中都用到了那些设计模式?用在什么场合?    
   Observer模式,在Servlet的监听器中应用到了观察者模式。
   singleton单例模式和Factory工厂模式结合使用在项目中无需使用者了解过多的细节就可获取有关的对象实例。比如Hibernate项目中通过SessionFactory来获取Session。
   生产者消费者模式: 日志记录,多线程产生日志,但写日志由于文件独占,不能多线程来写,于是我们就可以把线程压入队列,由日志线程来读取队列数据,完成写日志的操作。
25.给你一个整数类型的数组,写出按从小到大的顺序进行排列的方法?
    public static void fun(int [] a,int c){
        for(int i=0;i             for(int j=i;j                 if(a[i]                     t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
            }
            System.out.print(a[i]+" ");
        }
    }
26.递归实现1,1,2,3,5,8,….第30个数是多少?    
   public static int Foo(int i) 
    { 
        if (i <= 0) 
            return 0; 
        else if(i > 0 && i <= 2) 
            return 1; 
        else return Foo(i -1) + Foo(i - 2); 
    }  
    int i=Foo(30);
    System.out.println(i);
27.用的什么文件对比工具?(比如比较本次发版包和上次的区别)
       beyondCompare等文件比较工具。
   用什么工具画思维导图?
       xmind
   用什么工具做原型设计?
       Axure RP等
28.StackOverflowError和OutOfMemoryError区别?
   StackOverflowError是线程的虚拟机栈内存溢出,java线程执行时会把方法压入私有栈中,如果递归调用的层数太深,超过了栈的最大内存就会报这个错误。
   OutOfMemoryError是JVM不能分配给对象的创建空间.并且GC也不能够回收足够的空间,通常指堆的内存不足。
29.Redis的数据结构有哪些?
   字符串(strings),哈希表(hashes),列表(lists),集合(sets),有序集合(sorted sets)
30.常见的缓存策略有哪些?
   Cdn缓存,redis缓存,ehcache缓存等  
   你们项目中用到了什么缓存系统,如何设计的?
   Cdn 图片资源 js等, redis一主一从 echcache缓存数据
31.分布式集群下如何做到唯一序列号?
   Redis生成,mongodb的objectId,zk生成   
32.线程有哪几种状态?
       创建、就绪、运行、阻塞、死亡。
   简要介绍下线程的生命周期?   
       新建的线程是创建状态,调用start方法后进入就绪状态,获得执行权后处于运行状态,wait()、sleep、join、io、synchronized等进入阻塞状态,run()方法结束
       进入死亡状态。
   能否画出线程的生命周期图?
       略   
33.什么是线程局部变量?
       线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java 提供 ThreadLocal 类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放,Java 应用就存在内存泄露的风险。
   Java中sleep方法和wait方法的区别?
       虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件时获取到该锁。
   如何在两个线程间共享数据?
       通过在线程之间共享对象就可以了,然后通过wait/notify/notifyAll、await/signal/signalAll进行唤起和等待,比方说阻塞队列BlockingQueue就是为线程之间共享数据而设计的。    
34.什么是线程安全问题?
       从某个线程开始访问到访问结束的整个过程,如果有一个访问对象被其他线程修改,那么对于当前线程而言就发生了线程安全问题;如果在整个访问过程中,无一对象被其他线程修改,就是线程安全的。
   线程安全问题产生的根本原因? 
       共享数据存在被并发修改的可能
   线程安全问题解决思路?
       1.消除共享数据:成员变量与静态变量多线程共享,将这些全局变量转化为局部变量,局部变量存放在栈,线程间不共享,就不存在线程安全问题产生的环境了。
       2.使用线程同步机制加锁。
       3.建立副本:使用ThreadLocal为每一个线程建立一个变量的副本,各个线程间独立操作,互不影响。该方式本质上是消除共享数据思想的一种实现。
35.简述java线程工作内存与主内存变量交换过程?
   read - load - use - assign - store - write
36.volatile关键字的作用?
      保持变量的内存可见性和防止指令重排序。
   你是怎么理解的?
      线程中每次use变量时,都需要连续执行read->load->use几项操作,即所谓的每次使用都要从主内存更新变量值,这样其它线程的修改对该线程就是可见的。
    线程每次assign变量时,都需要连续执行assign->store->write几项操作,即所谓每次更新完后都会回写到主内存,这样使得其它线程读到的都是最新数据。
   多个线程达到同一个状态然后再一起执行,达到某一个状态之后再继续并发执行,这种怎么实现?
      jdk5之后有一个CyclicBarrir,  
37.jvm内存共分为那几个部分?
      虚拟机栈、堆、方法区、程序计数器、本地方法栈 
   被虚拟机加载的类信息,常量,静态变量等存放在其中哪个部分?
      方法区
38. 都有哪些类加载器?
        启动类加载器,扩展类加载器,应用类加载器,用户的自定义类加载器
    自定义类加载器用在哪些场景?
        如果需要对自己的代码加密的话,可以对编译后的代码进行加密,然后再通过实现自己的自定义类加载器进行解密,最后再加载。
        从网络等非标准来源加载类文件,也需要自己实现一个类加载器,从指定源进行加载。
39.有哪些垃圾回收算法?
        标记-清除算法,复制算法,标记整理算法,分代收集算法
    新生代适合用哪种垃圾回收算法?老生代呢?
        新生代:复制算法,新生代存活对象较少,复制的成本较低。
        老生代:标记清除算法或标记整理算法,存活对象较多,清除的成本较低。
    什么时候触发Minor GC?
        当Eden区满时,触发Minor GC
    什么时候触发Full GC?
        老年代空间不足或调用System.gc时。
40.JVM调优的常见命令行工具有哪些? 
    1)jps命令用于查询正在运行的JVM进程,
    2)jstat可以实时显示本地或远程JVM进程中类装载、内存、垃圾收集、JIT编译等数据
    3)jinfo用于查询当前运行这的JVM属性和参数的值。
    4)jmap用于显示当前Java堆和永久代的详细信息
    5)jhat用于分析使用jmap生成的dump文件,是JDK自带的工具
    6)jstack用于生成当前JVM的所有线程快照,线程快照是虚拟机每一条线程正在执行的方法,目的是定位线程出现长时间停顿的原因。
41.JVM常见的调优参数有哪些?
    -Xmx 指定java程序的最大堆内存, 使用java -Xmx5000M -version判断当前系统能分配的最大堆内存
    -Xms 指定最小堆内存, 通常设置成跟最大堆内存一样,减少GC
    -Xmn 设置年轻代大小。整个堆大小=年轻代大小 + 年老代大小。所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
    -Xss 指定线程的最大栈空间, 此参数决定了java函数调用的深度, 值越大调用深度越深, 若值太小则容易出栈溢出错误(StackOverflowError)
    -XX:PermSize 指定方法区(永久区)的初始值,默认是物理内存的1/64, 在Java8永久区移除, 代之的是元数据区, 由-XX:MetaspaceSize指定
    -XX:MaxPermSize 指定方法区的最大值, 默认是物理内存的1/4, 在java8中由-XX:MaxMetaspaceSize指定元数据区的大小
42.怎么获取 Java 程序使用的内存?堆使用的百分比?
   可以通过 java.lang.Runtime 类中与内存相关方法来获取剩余的内存,总内存及最大堆内存。
   通过这些方法你也可以获取到堆使用的百分比及堆内存的剩余空间。
43.什么是java内存泄露?
        内存泄漏一般可以理解为系统资源(各方面的资源,堆、栈、线程等)在错误使用的情况下,导致使用完毕的资源无法回收(或没有回收),从而导致新的资源分配请求无法完成,引起系统错误。
   如何分析解决这类问题?
        年老代堆空间被占满:代码内的内存泄漏可以通过一些分析工具进行分析,然后找出泄漏点进行改善。
        持久代被占满:增加持久代的空间 -XX:MaxPermSize=100M。
        堆栈溢出:一般就是递归没返回,或者循环调用造成
        线程堆栈满:增加线程栈大小。-Xss2m。
        系统内存被占满无法创建新线程:通过减少单个线程内存大小的方式来解决此类内存溢出(减少单个线程大小,使系统能够创建更多个线程)

44.什么是对称加密?什么是非对称加密?   
       对称加密:加密和解密使用相同的秘钥。
       非对称加密:需要两个秘钥,公钥和私钥。公钥和私钥成对出现。加密和解密使用不同的秘钥。
   项目中一般怎么结合使用对称加密和非对称加密传输加密数据?
       一般对称加密算法加密报文内容, 用非对称加密算法加密对称加密的秘钥。
45.SpringBoot中的@ServletComponentScan 注解的作用是?
   在SpringBootApplication上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。
 
 
 
--------------------------数据库相关-------------------------------    
1.什么是左连接、右连接,他们的区别是什么? 
  返回包括左表中的所有记录和右表中联结字段相等的记录.
  返回包括右表中的所有记录和左表中联结字段相等的记录.  
2.Having 功能和使用方法?
  对group by分组的结果进行过滤。
3.说说oracle中的经常使用到得函数 
    Length 长度、 lower 小写、upper 大写, to_date 转化日期, to_char转化字符 
    Ltrim 去左边空格、 rtrim去右边空格,substr取字串,add_month增加或者减掉月份、to_number转变为数字    
4.oracle中 In和Not in效率很慢,应该使用什么替代?
    Exits 和 Not Exits 替代 
5.了解哪些关系型数据库和非关系型数据库?
  关系型数据库: oracle、sql Server、mysql
  非关系型数据库:HBase、mongodb、redis     
6.触发器与存储过程相同点和区别?存储过程和触发器如何调试?
   相同点:都是SQL语句集,触发器其实就是一个修改了指定表中的数据时执行的存储过程。
   区别:  触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。 
7.在java种怎样调用oracle存储过程?
     call test_a(?,?) 
8.如何用sql查询存储过程或触发器的内容?
  select text from dba_source where name='名称'     
9.索引的优缺点?
    优点: 
    1. 创建唯一性索引,保证数据库表中每一行数据的唯一性 
    2. 大大加快数据的检索速度,这也是创建索引的最主要的原因 
    3. 加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 
    4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 
    缺点: 
    1. 索引创建在表上,不能创建在视图上 
    2. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加 
    3. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大 
    4. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度
10.索引使用的原则?
    索引字段建议建立NOT NULL约束 
    经常与其他表进行连接的表,在连接字段上应该建立索引; 
    经常出现在Where子句中的字段且过滤性很强的,特别是大表的字段,应该建立索引; 
    频繁DML的表,不要建立太多的索引; 
    不要将那些频繁修改的列作为索引列;
11.视图的好处, 视图可以控制权限吗?  
    好处: 
    1. 可以简单的将视图理解为sql查询语句,视图最大的好处是不占系统空间 
    2. 一些安全性很高的系统,不会公布系统的表结构,可能会使用视图将一些敏感信息过虑或者重命名后公布结构 
    3. 简化查询 
    可以控制权限的,在使用的时候需要将视图的使用权限grant给用户     
12.删除数据库表中完全重复的数据(假设表明A,有C1,C2,C3三个字段)  ?
   delete from A where rowid not in( select max(rowid) from A group by C1,C2,C3 HAVING COUNT(1)>1 ) 
13.oracle数据库大数据量下的分页解决方法?
   一般用截取ID方法,还有是三层嵌套方法。
   截取ID的方法
       select * from emp a, (select empno,rownum as num from emp)b  where a.empno=b.empno and b.num between 5 and 7;
   三层嵌套
       SELECT * FROM  ( SELECT A.*, rownum r  FROM  ( SELECT *  FROM emp ) A WHERE rownum <=7 ) B WHERE r >5);
14.乐观锁和悲观锁是什么?   
   乐观锁是设定每次修改都不会冲突,只在提交的时候去检查,悲观锁设定每次修改都会冲突,持有排他锁。 
15.SQL执行慢, 优化的一般步骤是什么?  
   查看慢日志 --- 定位慢查询 --- 查看慢查询执行计划 --- 根据执行计划确认优化方案 
16.用过oracle分析函数,简单介绍一下使用场景?
   rank() 是排名的函数,该函数组内排序后会进行跳号,分数相同的作为并列。 
   dense_rank() 该函数不会跳号,分数相同为并列第一,下一个是第二。 
   row_number() 可以通过over 根据某字段排序完之后进行组内(如果有partition by)排序。
 
 
 
--------------------------linux常用命令------------------------------- 
1.查找文件:
  find / -name filename.txt
2.查看进程(如websphere)
  ps –ef|grep websphere
3.终止进程 
  kill -9 进程编号
4.解压文件
  tar -xvzf test.tar.gz  
5.查看日志文件末尾十行(文件更新自动滚动)  
  tail -f exmaple.log
6.查看端口占用情况(如8080)
  netstat -tln | grep 8080   
7.你用过哪些常用的linux命令?
  答案不唯一: cp、mkdir、mv、ls  

 
-------------http相关------------------  
1. HTTP响应的结构是怎么样的?
   HTTP响应由三个部分组成:
   状态码(Status Code)
   HTTP头部(HTTP Header)
   主体(Body)
2.http中的200,302,404,500都代表什么状态?
   200:请求已成功
   302:重定向
   404:请求的资源(网页等)不存在
   500:内部服务器错误
3.常用哪些http调试抓包工具?
      fiddler,httpWatch等,答案不唯一。
  常用哪些发送http请求工具?
      postman、soapUI等,答案不唯一。
4. TCP的三次握手主要目的是什么?
   确认接收方和发送方的接收和发送功能正常,且能相互发送接收。
   
 
  

  
 
 
   

你可能感兴趣的:(面试题,nodeJs)