zoukankan      html  css  js  c++  java
  • java校招一些面试的题目

    数组和链表的区别

    • 数组静态分配内存,链表动态分配内存;
    • 数组在内存中连续,链表不一定连续;
    • 数组元素在栈区,链表元素在堆区;
    • 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n)
    • 数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(

    TCP和UDP的特性和区别

    TCP:

    • 优点:可靠 稳定

    • TCP的可靠体现在TCP在传输数据之前,会有三次握手来建立连接,而且在数据传递时,有确认. 窗口. 重传. 拥塞控制机制,在数据传完之后,还会断开来连接用来节约系统资源。

    • 缺点:慢,效率低,占用系统资源高,易被攻击

    • 在传递数据之前要先建立连接,这会消耗时间,而且在数据传递时,确认机制. 重传机制. 拥塞机制等都会消耗大量时间,而且要在每台设备上维护所有的传输连接。然而,每个连接都会占用系统的CPU,内存等硬件资源。因为TCP有确认机制. 三次握手机制,这些也导致TCP容易被利用,实现DOS. DDOS. CC等攻击。

    UDP:

    • 优点:快,比TCP稍安全

    • UDP没有TCP拥有的各种机制,是一种无状态的传输协议,所以传输数据非常快,没有TCP的这些机制,被攻击利用的机会就少一些,但是也无法避免被攻击。

    • 缺点:不可靠,不稳定

    • 因为没有TCP的这些机制,UDP在传输数据时,如果网络质量不好,就会很容易丢包,造成数据的缺失。

    适用场景:

    TCP:当对网络质量有要求时,比如HTTP,HTTPS,FTP等传输文件的协议;POP,SMTP等邮件传输的协议

    UDP:对网络通讯质量要求不高时,要求网络通讯速度要快的场景

    事务的四个特性

    • 一致性
    • 原子性
    • 持久性
    • 隔离性

    打印链表的思路

    /**
     * 〈一句话功能简述〉<br>
     *
     * @author hjsjy
     * @create 2018/10/17
     * @since 1.0.0
     */
    class Node<E> {//节点实现
        private E data;//链表存储的数据
        private Node next;//下一个结点
        public Node(E data){
            this.data=data;
        }
    
        public E getData() {
            return data;
        }
    
        public void setData(E data) {
            this.data = data;
        }
    
        public Node<E> getNext() {
            return next;
        }
    
        public void setNext(Node next) {
            this.next = next;
        }
    
    }
    public class HjsjyList<E>{
        private Node<E> head;
    
        public Node<E> getHead() {
            return head;
        }
    
        public void setHead(Node<E> head) {
            this.head = head;
        }
        public HjsjyList(E data){//链表的初始化
            this.head = new Node<>(data);
        }
        public void headInsert(E data){//头结点插入
            Node<E> node = new Node<>(data);
            node.setNext(head.getNext());
            head.setNext(node);
        }
        public void tailInsert(E data){//尾节点插入
            Node<E> node = new Node<>(data);
            if (head.getNext() == null) {
                head.setNext(node);
            }else{
                Node<E> p = head;
                while(p.getNext() != null){
                    p = p.getNext();
                }
                p.setNext(node);
            }
        }
    
        public void show(){
            Node<E> node = head.getNext();
            while(node != null){
                System.out.print(node.getData() + " ");
                node = node.getNext();
            }
            System.out.println();
        }
    
        public boolean delete(E data){
            Node<E> p = head.getNext();
            Node<E> s = head;
            while(p != null){
                if(p.getData().equals(data)){
                    s.setNext(p.getNext());
                    return true;
                }
                s = p;
                p = p.getNext();
            }
            return false;
        }
    
        public static void main(String[] args) {
            HjsjyList<Integer> list = new HjsjyList<Integer>(-1);
            for(int i = 0; i < 5; i++){
                list.tailInsert(i);
            }
            list.delete(3);
            list.show();
        }
    
    }
    
    

    java静态变量存放在哪里

    方法区

    实现字符串转数字

    string 和int之间的转换

    • string转换成int :Integer.valueOf(“12”)
    • int转换成string : String.valueOf(12)

    char和int之间的转换

    • 首先将char转换成string

    • String str=String.valueOf(‘2’)

    • Integer.valueof(str) 或者Integer.PaseInt(str)

    • Integer.valueof返回的是Integer对象,Integer.paseInt返回的是int

    实现字符串的里面抽取连续的数字

    进程有哪几种状态

    进程有三个状态,即就绪状态,运行状态,阻塞状态

    进程有哪些通信方式

    管道 命名管道 信号 消息队列 共享内存 信号量 套接字

    (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。

    (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建

    (3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数).

    (4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列System V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

    (5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率低而设计的。往往与其他通信机制,如信号量结合使用,来达到进程间的同步互斥。

    (6)信号量(semaphore):主要作为进程间以及同一个进程不同线程之间的同步手段。

    (7)套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字

    HashMap和Hashtable的区别

    • HashMap是线程不安全的,HashTable是线程安全的,使用了synchronized关键词
    • HashMap的键值都可以为null,HashTable的键值都不可以为null(运行时报错)

    HashMap的底层实现原理

    在Java8之前,其底层实现是数组+链表实现,Java8使用了数组+链表+红黑树实现。

    ArrayList 和 LinkedList 的区别

    • LinkedList 实现了 List 和 Deque 接口,一般称为双向链表;
    • LinkedList 在插入和删除数据时效率更高,ArrayList 在查找某个 index 的数据时效率更高;
    • LinkedList 比 ArrayList 需要更多的内存;

    Array 和 ArrayList 的区别

    Array 可以包含基本类型和对象类型,ArrayList 只能包含对象类型。
    Array 大小是固定的,ArrayList 的大小是动态变化的。
    ArrayList 提供了更多的方法和特性,比如:addAll(),removeAll(),iterator() 等等。

    JDK 中常用的包有哪些?

    答:java.lang、java.util、java.iojava.net、java.sql。

  • 相关阅读:
    分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
    动态规划 BZOJ1925 地精部落
    线性DP SPOJ Mobile Service
    线性DP codevs2185 最长公共上升子序列
    数位DP POJ3208 Apocalypse Someday
    线性DP POJ3666 Making the Grade
    杨氏矩阵 线性DP? POJ2279 Mr.Young's Picture Permutations
    tarjan强连通分量 洛谷P1262 间谍网络
    树链剖分 BZOJ3589 动态树
    二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
  • 原文地址:https://www.cnblogs.com/narojay/p/10812593.html
Copyright © 2011-2022 走看看