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。

  • 相关阅读:
    游戏运营-三节课
    游戏运营-游戏付费
    游戏运营--资深
    django 导出csv
    django-分页
    django-中间件
    django-缓存
    django post 与get请求理解
    django 中遇到的问题
    Linux下使用XAMPP
  • 原文地址:https://www.cnblogs.com/narojay/p/10812593.html
Copyright © 2011-2022 走看看