java面试题

1、sql单向加密:insert into table (username,password) values ('mike',MD5('pwd1234'));
2、sql双向加密:insert into table (username,password) values ('mike',ENCODE('pwd1234','abanaafn'));
3、sql筛选查询:select * from user where user_id in (select user_id from user group by user_id having count(user_id)>1) order by user_id desc;
4、sql聚合查询:select user_id from user group by user_id;
5、oracle索引的优缺点:
    - oracle 索引分为:聚集索引,非聚集索引,唯一索引
    - 优点:方便查询,在数据量大的时候排序更宜查询
    - 缺点:查询时要进行重新排序,减少了效率
    - 物理索引缺点:建立索引效率低,只能建一个更有说服力的
6、oracle的视图和存储过程:
    - 视图:其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看做是存储的查询或一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中。这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。
    - 存储过程:oracle有系统存储过程和自定义存储过程,为了完成特定功能的sql语句集,经编译后存储在数据库中,用户通过特定的存储过程名来执行。
7、oracle连接符:连接符为”||”或CONCAT();
8、oracle默认端口:1521
9、MYSQL左连接、右连接、内连接:
    - 内连接:左表和右表相同的数据
    - 外连接分为左外连接、右外连接和全外连接
        - 左外连接:以左表为准,去匹配右表,左表有多少条数据,结果就是多少条数据
        - 右外连接:与左连接相反
        - 全外连接:数据条数不一定,相当于是左外连接和右外连接的综合
10、存储原理:当用户创建索引的时候,oracle会自动地在表空间里创建索引段来存储索引的数据。
11、Char里面可以放汉字吗:char型变量就是用来存储Unicode编码字符的,Unicode编码字符集中包含了汉字,所以可以存放汉字,如果某个特殊的汉字没有包含在Unicode编码字符集中,那么char型变量就不能存储,Unicode占用两个字节,所以char型变量也是占用两个字节。
12、多态的表现形式:
    - 重载:overload表示同一类中可以有多个名称相同的方法,但这些方法的参数列表各不相同
    - 重写:override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实力对象调用这个方法时,将调用子类中定义的方法,这相当于把父类中定义的那个完全相同的方法覆盖掉了,这也是面向对象编程中的多态性的一种表现,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,子类方法的访问权限只能比父类的更大,不能更小。如果父类方法是private,那么子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
13、数据的加密模式:对称和非对称式
14、加密模式的顺序:传输加密、数据存储加密、数据完整性的鉴别、密钥管理
15、hashmap是线程不安全的,不是同步的。hashmap可以让你将空值作为一个表的条目的key或value。hashmap实际上是一个数组和链表的结合体,在java编程语言中,最基本的结构就是两种,一个是数组,一个是模拟指针(引用),所有的数据结构都可以用这两个基本的结构来构造,hashmap也不例外。
16、ArrayList和LinkedList的区别:
    - ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构
    - 对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针
    - 对于新增和删除操作add和remove,LinkedList比较占优,因为ArrayList要移动数据
    - 若只对单条数据插入和删除,ArrayList的速度反而优于LinkedList
    - 若是批量随机地插入删除数据,LinkedList的速度大大优于ArrayList。
        因为ArrayList每插入一条数据,要移动插入点之后的所有数据。在分别有200000条“记录”的ArrayList和LinkedList的首位插入20000条数据,LinkedList耗时约 是ArrayList的20分之1。
17、单例模式:
    public class Singleton2 {
      //私有的默认构造子
      private Singleton2() {}
      //注意,这里没有final    
      private static Singleton2 single=null;
      //静态工厂方法 
      public synchronized  static Singleton2 getInstance() {
           if (single == null) {  
              single = new Singleton2();
          }  
         return single;
      }
    }
18、工厂模式:
    public Instance IFactory(){
        public IProduct createProduct();
    }
    
    public class IProduct(){
        public void produce(){
            System.out.println("produce one product");
        }
    }
    
    public class Factory implements IFactory(){
    @Override
        public IProduct createProduct(){
            return new IProduct();
        }
    }
    
    public class client(){
        public static void main(String[] args){
            IFactory factory=new Factory();
            IProduct product=factory.createProduct();
            product.produce();
        }
    }
    
19、hashmap和hashtable的区别:
    - 历史原因:hashtable是基于陈旧的Dictionary类的,hashmap是java1.2引进的map接口的一个实现
    - 同步性:hashtable是线程安全的,也就是说是同步的,hashmap是非线程安全的,不是同步的。hashtable的方法是synchronized,而hashmap的方法不是。
    - 值:只有hashmap可以允许用户使用空值作为key或者value
    - hashtable和hashmap采用的hash/rehash算法都大概一样,所以性能差距不大。

20、遍历hashmap的两种方式:
    - Map map =new HashMap();
    Iterator iter = map.entrySet().iterator();
    Iterator iter = map.keySet().iterator();

21、线程的五种状态:
    - 创建:在生成线程对象时,并没有调用start方法,这个时候线程处于创建状态。
    - 就绪:当调用start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时该线程处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
    - 运行:线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数中的代码。
    - 阻塞:线程正在运行的时候,被暂停,通常是为了等待某个事件发生(比如某个资源就绪)之后再继续运行。(sleep,suspend,wait等方法都可以导致线程阻塞)
    - 死亡:如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪状态。

22、多线程的安全问题:多个线程在执行同一段代码的时候,每次的执行结果和单线程执行结果都是一样的,不存在执行结果的二义性,就可以称作是线程安全的。线程安全问题多是由全局变量和静态变量引起的,当多个线程对共享数据只执行读操作,不执行写操作时,一般是线程安全的;当多个线程都执行写操作时,需要考虑线程同步来解决线程安全问题。

23、线程和同步:
    - 说明Java线程的两个特性,可见性和有序性。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现.
    - java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。
    
24、高并发:手段无非是切割(纵向,横向)和负载均衡。纵向分隔主要是按业务(功能)来分,也就是所谓面向服务架构,横向分隔方式比较多,主要依赖于所处理的对象属性负载均衡则可以是镜像(部署)分布(同样的功能部署几份)和计算分布(一个问题分几个子问题在不同的机器上运行,然后合并结果)。当然,这些手段是可以综合利用的,最终可以做成多流水线分布式计算模式。

25、list,map,set的区别和联系:
    - list:有序,通过索引存取
    - map:映射,存放是键值对,键是唯一的
    - set: 无序,遍历存取
    区别和联系:三者都是接口,List与Set具有相似性,他们都是单列元素的集合,list,set是继承collection,而map不是,list可以有重复的元素,有先后顺序,set不允许有重复的元素,而且无序,map保存key-value值,key不能重复,value可以重复。
26、java常见的数据类型和它们对应的包装类:
    - int,double,float,long,short,boolean,byte,char    
    - pInteger,Double,Float,Long,Short,Boolean,Byte,Characher
    - java的隐式类型是int,byte,short,char都可以隐含转换为int
27、object类型中有哪些方法:
    - equals();
    - hashCode();
    - wait();
    - toString();
    - finalize();
    - notify();
    - notifyAll();
28、final、finally和finalize的区别?
    - final 用于声明属性、方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。
    - finally 是异常处理语句结构的一部分,表示总是执行。
    - finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。
29、LinkedList和ArrayList的区别:
    - ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。
    - LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。
30、int和String是如何转化的:
    - int --> String: int a=123;
        - String b = Integer.toString(a);
        - String c = String.valueOf(a);
        - String d = a + "";
    - String --> int: String a="123";
        - int b = Integer.parseInt(a);
        - int c = Integer.valueOf(aa).intValue();
31、tomcat出现乱码如何解决?
    - java的内核和class文件是基于unicode的,这使java程序具有良好的跨平台性,但这也带来了一些中文乱码的问题。原因主要有两个方面,java和jsp文件本身编译时产生的乱码问题和java程序与其他媒介交互产生的乱码问题。
32、如何增加tomcat和jdk的内存?
    - tomcat
        - linux下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下设置:SET JAVA_OPTS=-Xms512m -Xmx1024m;表示初始化内存为512MB,可以使用的最大内存为1024MB;
        - windows下,在{tomcat_home}/bin/catalina.bat的前面,增加如下设置:SET JAVA_OPTS=-Xms512m -Xmx1024m;
    - jdk
        - jdk的版本分为3个
            - JAVA SE(标准版):以前叫J2SE,允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的java应用程序。J2SE是基础包,但是也包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
            - JAVA EE(企业版):以前叫J2EE,企业版帮助开发和部署可移植、健壮、可伸缩且安全的服务器端java应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
            - JAVA ME(微型版):这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
33、谈谈你对面向对象的理解:
    - JAVA这个语言本身就是面向对象的语言,JAVA支持三种面向对象的基本特征:继承、封装、多态。

转载于:https://my.oschina.net/u/3184096/blog/1526706

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值