1.自我介绍

这个不用说了,自己介绍一下自己。


2.数据库MySql和SQLServer以及Oracle的区别?

 

----1.Oracle:最贵,功能最多,安装最不方便,Oracle环境里的其他相关组件最多,支持平台数量一般,使用中等方便,开发中等方便,运维中等方便,不开源,速度最慢,最安全。

----2.Microsoft SQL Server 2014:中等贵,功能最少,安装中等方便,Microsoft SQL Server 2014环境里的其他相关组件最少,支持平台最少,使用最方便,开发最方便,运维最方便,不开源,速度中等,一般安全。

----3.Mysql:免费,功能中等,安装最方便,Mysql环境里的其他相关组件数量中等,支持平台最多,使用最不方便,开发最不方便,运维最不方便,有开源版本,速度最快,最不安全。

二、

Oracle传统,跨平台,稳定,适合OLTP,最接近数据库设计范式,一致性处理是最好的,也是最复杂的。适合金融,电信等企业。要想用好并发挥其性能,对管理员的能力要求较高。另维护成本较高。SqlServer目前只能在Windows系列执行,限制其发展,所以在高可用,灾备,并发也受win的限制。优点是,操作简单,人员要求低,学习曲线低,据说纽交所使用中。MySql适合开发者,简单。不过随着Oracle的入主,功能越来越完善,又因为其宣布要开源,阿里开发了改进大数据库,性能和应用场景不断拓宽,未来前进可人。

Mysql 屌丝创业青年
Sqlserver 富二代 
Oracle 创一代+高富帅 ;

MySQL:瑞典MYSQLAB推出,关系型数据库,开源免费,适用于WEB网站、日志管理、数据仓库和嵌入式系统等小型系统。 SQLServer:微软Microsoft推出,关系型数据库,可视化、安全性与稳定性较好,适用于企业级海量数据存储查询。
Oracle:美国甲骨文公司推出,关系型数据库,跨平台,安全稳定,结构复杂,对管理员要求高,常用于金融、电信领域。 

3.数据库的左连接和右连接

1)左连接:只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来

2)右连接:右连接是只要右边表中有记录,数据就能检索出来

 

4.数据库的视图,为什么要用视图?

视图其实就是select查询语句 通过关联查询或者其他查询组建起来的,他是多个表的查询结果集,使用视图可以提高一个程序的SQL效率,比平常使用select 更加便捷,我们可以直接select * from 视图VIEW 来获取,数据库也更容易维护更新

 

5.什么是事务?

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

 

6.数据库如何获取表里最大值?

假如想要取得最大ID的name值(这里只是借ID为例 不用ordery by)

解决办法:select max(id) from db_name;

 

7.那获取第二大的呢?

 先递减排序获取前两条,再递增排序获取第一条

select * from (select recID from book order by recID DESC limit 0,2) as b order by b.recID ASC limit 0,1;

还有一种解法:
先获取它的最大值,再获取小于最大值的数,然后取最大值。因为这里用到了max函数,会造成对全表扫描,速度略慢些。
 

select max(recID) as SecondID  from book where recID<(select max(recID) from book);

8.短距离通信

因为我是物联网专业的,所以他问了一下物联网方面的知识。我给他介绍了短距离通信。

 

9.如何实现多线程服务器?

https://blog.csdn.net/fengsigaoju/article/details/56019956

 

如何实现多线程缓冲池?

通过队列来实现

https://blog.csdn.net/z55887/article/details/79060070

10.java的数组、List、map的区别?

数组是固定长度的,list不固定,map是基于key-values进行映射的。访问元素数组可以通过下标访问,list需要遍历,map可以通过Key值获取map的values。

 

11.链表反转

 1.链表内反转

节点的下一个元素插到节点之前。依次进行,

例如:

链表的第二个插到第一个之前,第三个插到第二个之前
https://blog.csdn.net/xiao__jia__jia/article/details/82788117

2.用栈实现

遍历链表,把每一个节点放到栈里面,遍历完,然后再出栈

public class ListNode {

    int val;

    ListNode next = null;


    ListNode(int val) {

    this.val = val;

  }

}


import java.util.Stack;

public class ListNode {

    int val;

    ListNode next = null;

    ListNode(int val) {

    this.val = val;

}

}//链表原结构


public class Solution {

    public ListNode do_reverse(Stack<ListNode> data)

    {

        ListNode ans=data.pop();

    if(data.empty())

    {

        ans.next=null;
    
        return ans;

    }

    ans.next=do_reverse(data);

    return ans;

}//递归反转链表核心代码


public ListNode ReverseList(ListNode head)

{

    if(head==null)

        return null;

    Stack<ListNode> data=new Stack<ListNode>();//下方循环将原链表所有节点压栈,方便反转

while(true)//循环压栈

{

    if(head.next==null)

    {

        data.push(head);

        break;

    }

        data.push(head);

        head=head.next;

    }

    return do_reverse(data);//调用核心反转函数


    }//采用栈结构,调用核心反转函数代码

}

 

12.实现线程的方式

1.继承Thread类。

2.实现Runnable,然后重写run方法。

两种方式的区别。

1.一个类只能继承一个父类,如果已经继承了Thread,就无法继承其他的了,所以一般用runnable.

2.使用Runnable可以避免点继承的局限,一个类可以继承多个接口。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐