![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题集锦
云里飞鸟轻轻摇摆
这个作者很懒,什么都没留下…
展开
-
#oracle--删除以id为主键地重复记录,且只留下重复记录中第一条记录的sql语句
这道题是我面试一家金融软件公司的笔试题,该题如下所示: 如下表,是一张用户表,且uerid为主键,图如下所示。 要求能够通过一个sql语句删除所有重复的记录,并只留下重复记录中第一条记录的sql语句。答案:delete from userinfo u3 where u3.userid in ( with aaa as(select u2.useri...原创 2018-09-17 17:58:50 · 1108 阅读 · 0 评论 -
源码分析篇--Java集合操作(2)
4、两大集合接口在Java集合中,有两大集合,一个是Collection接口及其实现类,另一个是Map接口及其实现类。下面给出这两种集合的框架图。如下所示。4.1Collection接口框架图4.2Map接口框架图从上面两个框架图可以看出,Cllection接口和Map接口是两大顶层接口。二者最为显著的区别是:Cllection接口的实现类及其子类的元素都是单一的,不可分割的元素,而M...原创 2018-12-31 12:27:40 · 152 阅读 · 0 评论 -
源码分析篇--Java集合操作(3)
二、Collection接口Collection是一个集合顶层接口,位于java.util包下,继承了Iterable接口, public interface Collection extends Iterable { Iterable接口只有一个iterator()方法,如下所示。public interface Iterable<T> { /** * Ret...原创 2018-12-31 12:35:14 · 140 阅读 · 0 评论 -
源码分析篇--Java集合操作(4)
2、List的实现类List是一个接口,继承自Collection接口,包为java.util.*,由于继承的特性,因此,List接口具有了Collection接口的全部方法。但是,List本身又重新定义了这些方法:int size();boolean isEmpty();boolean contains(Object o);Iterator iterator();Object[] t...原创 2018-12-31 12:57:11 · 129 阅读 · 1 评论 -
源码分析篇--Java集合操作(5)
2.6 ArrayList容器ArrayList类实现了List接口,它继承自AbstractList抽象类,继承机构如下所示:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Seri...原创 2018-12-31 13:23:37 · 149 阅读 · 0 评论 -
源码分析篇--Java集合操作(6)顺序表的扩容原理
2.6.4 顺序表的扩容原理之add()方法的实现原理add()方法用于将元素动态添加到ArrayList容器中。将数据保存在list后,我们可以通过该list进行CRUD操作。我们知道,list(列表)的底层是由数组设计的,因此,数组具备了哪些优缺点,list就具备了哪些优缺点。我们知道,链表与数组是两种不同的数据结构,数据结构可以分为线性结构和非线性结构,在线性结构中,存储方式又分为连续存...原创 2018-12-31 13:35:18 · 540 阅读 · 0 评论 -
源码分析篇--Java集合操作(7)自己实现一个add()方法
2.6.5 自己实现一个add()方法分析:add()方法涉及到扩容,扩容需要size(顺序表大小)、顺序表底层支持数组、默认容量大小以及默认的控元素数组四个必要属性,代码实现如下所示。package com.yzh.maven.main;/** * @className MyArrayList<E> * @description 创建一个顺序表 * @author yz...原创 2018-12-31 13:41:32 · 756 阅读 · 3 评论 -
# 源码分析篇--Java集合操作(8)根据源码设计一个顺序表
2.6.6 get(int index)方法我们知道,顺序表中的get方法通过元素的索引获取底层数组的元素。我们可以把该方法理解为顺序表的查询操作,该方法返回元素范型类型,源代码如下所示:public E get(int index) { //范围检查rangeCheck(index);return elementData(index);}rangeCheck(index);方法...原创 2019-01-02 02:12:33 · 171 阅读 · 0 评论 -
#源码分析篇--Java集合操作(9)重写顺序表的toString()方法
2.6.12 重写顺序表的toString()方法默认情况下,普通类都是继承了Object超类的toString(),这个方法如下所示:public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());}在打印某个对象时,其实是省略了toString(),因...原创 2019-01-02 02:19:00 · 621 阅读 · 0 评论 -
#Java算法设计与分析1--递归算法
1.递归算法1.1递归的概念所谓递归,就是程序方法在运行过程中自身调用自身。定义如下所示。fn(){ if(递归出口条件){ return x;}else{ //some codes…return fn();}}1.2递归的使用条件1.2.1 必须要有明确的递归出口所谓递归出口就是需要有明确的结束条件。1.2.2 每次递归都要使问题的规模减小1.2.3 递归的规模...原创 2019-01-09 07:33:03 · 491 阅读 · 0 评论 -
#面试--单链表常见面试题汇总
2.7.4.3.8.1 找出单链表中的倒数第k个元素,实现该方法这是一道经典的笔试题,其实实现该方法十分简单。直接找倒数第k个元素似乎不太容易,要想找出倒数第k个元素,我们可以从第k个元素和倒数第k个元素的关系来获取倒数第k个元素。该关系如下所示。从上图可以看出来,倒数第k个节点的索引 = size – (k+1)。所以方法实现如下:/**@functionName reverseGe...原创 2019-05-04 18:57:22 · 723 阅读 · 0 评论 -
源码分析篇--Java集合操作(1)
一、集合框架1、集合框架体系图2、集合的概念 Java集合是使程序能够存储和操纵元素不固定的一组数据。 所有Java集合类都位于java.uti包中。与Java数组不同,Java集合中不能存放基本数据类型,只能存放对象的引用。但是在JDK5.0以后的版本当中,JAVA增加了“自动装箱”和“自动拆箱”的机制,比如如果要存入一个INT类型的数据,JVM会把数据包装成Integer然后再存入集合...原创 2018-12-31 12:16:12 · 169 阅读 · 0 评论 -
#Java集合--ListIterator和Iterator迭代器的联系与区别
List的listIterator()方法会返回一个ListIterator迭代器对象,该迭代器的功能和Iterator迭代器基本相同,基本使用如下所示:ListIterator&lt;String&gt; iterator = list.listIterator(); for(;iterator.hasNext();){ String value = iterator.next(); S...原创 2018-12-03 00:10:37 · 403 阅读 · 0 评论 -
# Java面试--switch结构
1、switch 语句的格式:switch ( 变量 ){ case 变量可能值1 : 分支一; break;case 变量可能值2 : 分支二; break;case 变量可能值3 : 分支三; break;…default :最后分支;}2、switch支持的类型switch支持整型、字符串、和char类型,不支持浮点类型。3、break和def...原创 2018-11-11 10:48:42 · 210 阅读 · 0 评论 -
#面试 --byte c = (byte) -129;和byte d = (byte) 128;会输出什么?
如果我们写成byte c = -129;会发生编译检察错误,无法进行编译,所以必须要强转:byte c = (byte) -129;System.out.println(c);byte d = (byte) 128;System.out.println(d);/**output:127-128*/原因:这个是编码方式决定的,Java中正数用源码表示,负数用补码表示,第一位是符号位...原创 2018-09-17 23:14:40 · 1724 阅读 · 0 评论 -
#面试 --short i =1;i = i+1;和short i =1;i+=1;的运行结果
short i = 1;//这里不会报错(定义为short类型) i = i+1;说明:上面的代码会发生编译器错误,即编译过不去,会提示Add cast to short;short i = 1;//这里不会报错 i += 1;解析:对于short i =1;i = i+1;由于1是int类型,因此i+1运算结果也是int类型,需要强制转换类型才能赋值给short类型;而short i = ...原创 2018-09-17 23:30:19 · 2401 阅读 · 0 评论 -
#面试--主线程与子线程的执行顺序
一般情况下,主线程总是优于子线程的执行,我们看一下下面的情况:package com.yzh.job.test;public class Thread2 { public static void main(String[] args) { Thread t1 = new Thread(new Runnable(){ @Override public void run() {...原创 2018-09-18 04:02:59 · 5662 阅读 · 1 评论 -
#Java&面试--多线程安全问题的三种解决方式
多线程安全问题可以用下面的案例来描述:package com.yzh.job.test;public class Thread3 { public static void main(String[] args) { Thread t1 = new Thread(){ @Override public void run(){ String str = "yuanzhih...原创 2018-09-18 04:58:43 · 400 阅读 · 0 评论 -
#Java&面试--控制多线程安全与顺序执行
Condition类的signal则是唤醒被Condition类使用await作用的那个线程,它会有针对性的唤醒线程,而不是随机唤醒一个线程,以保证线程执行的顺序:package com.yzh.job.test;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import...原创 2018-09-18 13:09:25 · 161 阅读 · 0 评论 -
#Java线程--创建线程的几种方式
1、继承Threadpackage com.yzh.job.test;public class Thread5 extends Thread{ public static void main(String[] args) { new Thread5(){ public void run(){ boolean flag = true; int count = 1; ...转载 2018-09-26 01:37:44 · 101 阅读 · 0 评论 -
#面试&oracle--truncate与delete的区别
1、在功能上,truncate是清空一个表的内容,它相当于delete from table_name。2、delete是dml操作,truncate是ddl操作;因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollback segments, 而truncate不会。3、在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使...原创 2018-09-26 03:53:19 · 237 阅读 · 0 评论 -
#Java基础--&&逻辑联结符的特点
package com.yx.yzh.webtest;public class SS1 {public static void main(String[] args) {String[] ss = null;if(null != ss && ss.length>0){System.out.println(“AAAAAAAA”);}else{System.out....原创 2018-10-14 04:28:23 · 136 阅读 · 0 评论 -
#简单算法知识--冒泡排序
一、算法分析算法伪代码:for1 set i = 1…n;//循环次数for2 set j = 1…n+1-i;//每轮需要比较的次数swap();//交换数据二、算法代码实现package com.yx.yzh.webtest;public class BubbleSort { public static void main(String[] args) { int[] a...原创 2018-10-22 01:58:52 · 131 阅读 · 0 评论 -
#底层原理&经典面试题--Integer类型的大小比较
(1)Integer i = 156;Integer j =156;if(i == j)System.out.println(true);System.out.println(true);(2)Integer i1 = 126;Integer j1 = 126;if(i1 == j1)System.out.println(true);System.out.println(tr...原创 2018-11-11 07:02:44 · 690 阅读 · 0 评论 -
#经典面试题--全组合问题
给定一个非重复数数列,求该数列的全组合。例如,{1,2,3}的全组合为{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}。这是一道非常经典的笔试题,可以通过递归来求解。这里我们可以利用上面已知的二进制方法来求解,我们可以将组合数中的每一个数标记为”1”,0表示未击中该组合数的任何数字,例如,110表示击中了该组合数的前两个数字,这样我们可以通过数组来取出这两个数字,从得到...原创 2019-05-04 19:24:47 · 410 阅读 · 0 评论