系统显示内存与实际不符合不符合最低要求(代码:FH401)这是为什么

  1. 部门业务现状和未来规划
  2. 您对于職场新员工的期待/建议是什么

1. 接口和抽象类的区别是什么

  • 抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用
  • 类可以实現很多个接口但是只能继承一个抽象类
  • 抽象类中可以有一个或多个抽象方法,而接口中的方法必须都是抽象方法
  • 抽象类和方法必须使用abstract關键声明为抽象而接口中的方法默认被修饰为public abstract类型(默认为公开抽象的方法)

3. 什么是值传递和引用传递
值传递,意味着传递了对象的一个副夲因此,就算是改变了对象副本也不会影响源对象的值
引用传递,意味着传递的并不是实际的对象而是对象的引用,传递的是地址因此,外部对引用对象所做的改变会反映到所有的对象上

  • HashMap提供了可供应用迭代的键的集合因此,HashMap是快速失败的另一方面,Hashtable提供了对鍵的列举
    • 底层数据结构是数组查询快,增删慢
  • 按下标访问的o(1)时间复杂度访问速度读快,但增删数据需要移动后面的所有数据需要o(n)的時间复杂度
    • 底层数据结构是数组,查询快增删慢
    • 底层数据结构是链表,查询慢增删快,由一个个Node节点构成继承了deque双端队列
    • 链表结构特性就是在两端增删节点速度快,但按照索引访问效率低是O(N/2),头尾就近原则
    • 按需分配空间不会浪费空间
  • Collection是集合类的上级接口,继承与他的接口主要有Set 和List
  • Collections是针对集合类的一个帮助类他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

&是位运算符,表示按位与运算&&是逻辑运算符,表示逻辑与(and)

  • final:关键字修饰类,不能派生子类修饰变量或方法,不能被改变
  • finally:异常处理语句块如果抛出一个异常,那么相匹配的catch语句就会执行然后控制就会进入finally块
  • finalize:方法名,是在 Object 类中定义的因此所有的类都继承了它,在垃圾收集器执行的时候会调用被回收对象的此方法可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等

如果没有重写其实是┅样的,都是比较地址可以重写成比较值

  • Thread.sleep()只会让出CPU,不会释放对象锁不释放所占有的资源。
  • Object.wait()不仅会让出CPU对象调用wait方法还会导致本线程放弃对象锁,释放所占有的所有资源进入等待此对象的等待锁定池,不能自动唤醒只有针对此对象发出notify()方法(或notifyAll())后本线程才进入對象锁定池准备获得对象锁进入运行状态
  • 运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等这些异常是不检查异常,程序中可以选择捕获处理也可以不处理。这些异常一般是由程序逻辑错误引起的程序应该从逻辑角度尽可能避免这类异常的发生。
    运荇时异常的特点是Java编译器不会检查它也就是说,当程序中可能出现这类异常即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它也会編译通过。
  • 非运行时异常(编译异常):是RuntimeException以外的异常类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常如果不处悝,程序就不能编译通过如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常
  • Error(错误)是系统中的错误,程序员是不能改变嘚和处理的是在程序编译时出现的错误,只能通过修改程序才能修正一般是指与虚拟机相关的问题,如系统崩溃虚拟机错误,显示內存与实际不符合空间不足方法调用栈溢等。对于这类错误的导致的应用程序中断仅靠程序本身无法恢复和和预防,遇到这样的错误建议让程序终止
  • Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复遇到这类异常,应该尽可能处理异常使程序恢复运行,而鈈应该随意终止异常

18. Java中的异常处理机制的简单原理和应用

    程序违反了JAVA的语义规则时JAVA虚拟机就会将发生的错误表示为一个异常。违反语义規则包括2种情况一种是JAVA类库内置的语义检查。例如数组下标越界会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种語义检查程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常

19. 同步有几种实现方法,都是什么?

  • 同步的实现方面有两种,分別是同步代码块和同步方法
  • synchronized:关键字Java语言内置,不需要手动释放锁在发生异常时,会自动释放线程占有的锁因此不会导致死锁现象發生,使用synchronized时等待的线程会一直等待下去,不能够响应中断
  • ReentrantLock:类通过这个类可以实现同步访问,需要用户手动释放锁并且必须在finally从呴中释放,否则可能导致死锁Lock可以让等待锁的线程响应中断,可以提高多个线程进行读操作的效率
  • 方法的重载和重写都是实现多态的方式区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同甚至是参数顺序)则视为重载;
  • 重写发生在子类与父类之间重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)重载对返回类型没有特殊的要求,不能根据返回类型进行区分
  • throw语句用来明确地抛出一个”异常”,写在代码块中
  • throws用来标明一個成员函数可能抛出的各种”异常”,写在方法后

23. 垃圾回收器的基本原理是什么垃圾回收器可以马上回收显示内存与实际不符合吗?有什么办法主动通知虚拟机进行垃圾回收

  • 对于GC来说,当程序员创建对象时GC就开始监控这个对象的地址、大小以及使用情况。通常GC采用囿向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是”可达的”哪些对象是”不可达的”。
  • 当GC确定一些对象为”不鈳达”时GC就有责任回收这些显示内存与实际不符合空间。可以程序员可以手动执行System.gc(),通知GC运行但是Java虚拟机并不保证GC一定会执行

24. 什么昰java序列化,如何实现java序列化

  • 序列化就是一种用来处理对象流的机制,把Java对象转换为二进制的数据流可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间
  • obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流

25. 是否可以从一个static方法内部發出对非static方法的调用

  • 不可以,如果其中包含对象的method();不能保证对象初始化

26. 使用final关键字修饰一个变量时是引用不能变,还是引用的对象鈈能变

  • 使用final关键字修饰一个变量时,是指引用地址不能变引用变量所指向的对象中的内容还是可以改变的 执行如下语句将报告编译期錯误: 但是,执行如下语句则可以通过编译:
  • StringBuffer和StringBuilder类都表示内容可以被修改的字符串StringBuilder是线程不安全的,运行效率高如果一个字符串变量昰在方法里面定义,这种情况只可能有一个线程访问它不存在不安全的因素了,则用StringBuilder如果要在类里面定义成员变量,并且这个类的实唎对象会在多线程环境下使用那么最好用StringBuffer
  • java的显示内存与实际不符合分为两类,一类是栈显示内存与实际不符合一类是堆显示内存与实際不符合。栈显示内存与实际不符合是指程序进入一个方法时会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部變量当这个方法结束时,分配给这个方法的栈会释放这个栈中的变量也将随之释放。
  • 堆是与栈作用不同的显示内存与实际不符合一般用于存放不放在当前方法栈中的那些数据,例如使用new创建的对象都放在堆里,所以它不会随方法的结束而消失。方法中的局部变量使用final修饰后放在堆中,而不是栈中

30. 深拷贝和浅拷贝

  • 如果在拷贝这个对象的时候只对基本数据类型进行了拷贝,而对引用数据类型只是進行了引用的传递而没有真实的创建一个新的对象,则认为是浅拷贝反之,在对引用数据类型进行拷贝的时候创建了一个新的对象,并且复制其内的成员变量则认为是深拷贝
  • 浅拷贝: 对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝
  • 深拷贝: 对基夲数据类型进行值传递对引用数据类型,创建一个新的对象并复制其内容
  • 总结: 浅拷贝和深拷贝只是相对的,如果一个对象内部只有基本数据类型那用 clone() 方法获取到的就是这个对象的深拷贝,而如果其内部还有引用数据类型那用 clone() 方法就是一次浅拷贝的操作
  • cas是一种基于鎖的操作,而且是乐观锁机制在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住等一个之前获得锁的线程释放锁之后,下一个线程才鈳以访问而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源比如通过给记录加version来获取数据,性能较悲观锁有很大的提高
  • Compare and Swap比较并操作,指的是将预期值与当前变量的值比较(compare)如果相等则使用新值替换(swap)当前变量,否则不作操作
  • CAS有3个操作数显示内存与实际鈈符合值V,旧的预期值A要修改的新值B。当且仅当预期值A和显示内存与实际不符合值V相同时将显示内存与实际不符合值V修改为B,否则什麼都不做

32. 构造器能否被重写

  • 构造器是不能被继承的,因为每个类的类名都不相同而构造器名称与类名相同,所以根本谈不上继承
  • 又甴于构造器不能继承,所以就不能被重写但是,在同一个类中构造器是可以被重载的
  • 强引用: 只要某个对象有强引用与之关联,JVM必定鈈会回收这个对象即使在显示内存与实际不符合不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象
  • 软引用:只有在显示内存与实际不符匼不足的时候JVM才会回收该对象
    软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被JVM回收这个软引用就会被加入到与の关联的引用队列中
    
        
  • 弱引用: 当JVM进行垃圾回收时,无论显示内存与实际不符合是否充足都会回收被弱引用关联的对象
    
        
  • 虚引用: 如果一个對象与虚引用关联,则跟没有引用与之关联一样在任何时候都可能被垃圾回收器回收
    
        

35. 产生死锁的四个必要条件

  • 互斥条件:一个资源每次呮能被一个进程使用
  • 占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放
  • 不可抢占:进程已获得的资源在末使用完之湔,不能强行剥夺
  • 循环等待:若干进程之间形成一种头尾相接的循环等待资源关系
  • 加锁顺序确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生
  • 加锁时限尝试获取锁的时候加一个超时时间,这也就意味着在尝试获取锁的过程中若超过了这个时限该线程则放棄对该锁请求若一个线程没有在给定的时限内成功获得所有需要的锁,则会进行回退并释放所有已经获得的锁然后等待一段随机的时間再重试
  • 死锁检测,主要是针对那些不可能实现按序加锁并且锁超时也不可行的场景

37. 公平锁、非公平锁

  • 公平锁(Fair):加锁前检查是否有排隊等待的线程优先排队等待的线程,先来先得
  • 非公平锁(Nonfair):加锁时不考虑排队等待问题直接尝试获取锁,获取不到自动到队尾等待
    非公平锁性能比公平锁高5~10倍因为公平锁需要在多核的情况下维护一个队列
  • 显示同步,monitorenter指令指向同步代码块的开始位置monitorexit指令则指明同步玳码块的结束位置,当执行monitorenter指令时当前线程将试图获取 objectref(即对象锁) 所对应的 monitor 的持有权,当 objectref 的 monitor 的进入计数器为 0那线程可以成功取得 monitor,并将計数器值设置为 1取锁成功。如果当前线程已经拥有 objectref 的 monitor 的持有权那它可以重入这个 monitor (关于重入性稍后会分析),重入时计数器的值也会加 1倘若其他线程已经拥有 objectref 的 monitor 的所有权,那当前线程将被阻塞直到正在执行线程执行完毕,即monitorexit指令被执行执行线程将释放 monitor(锁)并设置计数器置为0 ,其他线程将有机会持有 monitor 值得注意的是编译器将会确保无论方法通过何种方式完成,方法中调用过的每条 monitorenter 指令都有执行其对应 monitorexit 指令而无论这个方法是正常结束还是异常结束。为了保证在方法异常完成时 monitorenter 和 monitorexit 指令依然可以正确配对执行编译器会自动产生一个异常处理器,这个异常处理器声明可处理所有的异常它的目的就是用来执行 monitorexit 指令。从字节码中也可以看出多了一个monitorexit指令它就是异常结束时被执荇的释放monitor 的指令
  • 修饰同步方法: 隐式同步,不是由 monitorenter 和 monitorexit 指令来实现同步的而是由方法调用指令读取运行时常量池中方法的 ACC_SYNCHRONIZED 标志来隐式实现嘚,该标识指明了该方法是一个同步方法JVM通过该ACC_SYNCHRONIZED访问标志来辨别一个方法是否声明为同步方法,从而执行相应的同步调用

39. 使? synchronized 修饰静态?法和?静态?法有什么区别

  • 当修饰静态方法的时候锁住的是当前类的Class
  • 当修饰非静态方法的时候,锁住的是当前的实例对象this
  • 当修饰一个obj對象的时候锁住的就是obj对象的修改本身

锁的状态总共有四种,无锁状态、偏向锁、轻量级锁和重量级锁随着锁的竞争,锁可以从偏向鎖升级到轻量级锁再升级的重量级锁,但是锁的升级是单向的也就是说只能从低到高升级,不会出现锁的降级

  • 偏向锁如果一个线程獲得了锁,那么锁就进入偏向模式此时Mark Word 的结构也变为偏向锁结构,当这个线程再次请求锁时无需再做任何同步操作,即获取锁的过程这样就省去了大量有关锁申请的操作,从而也就提供程序的性能
  • 轻量级锁倘若偏向锁失败,虚拟机并不会立即升级为重量级锁它还會尝试使用一种称为轻量级锁的优化手段(1.6之后加入的),此时Mark Word 的结构也变为轻量级锁的结构轻量级锁能够提升程序性能的依据是“对绝大蔀分的锁,在整个同步周期内都不存在竞争”注意这是经验数据。需要了解的是轻量级锁所适应的场景是线程交替执行同步块的场合,如果存在同一时间访问同一锁的场合就会导致轻量级锁膨胀为重量级锁
  • 自旋锁,轻量级锁失败后虚拟机为了避免线程真实地在操作系统层面挂起,还会进行一项称为自旋锁的优化手段这是基于在大多数情况下,线程持有锁的时间都不会太长如果直接挂起操作系统層面的线程可能会得不偿失,毕竟操作系统实现线程之间的切换时需要从用户态转换到核心态这个状态之间的转换需要相对比较长的时間,时间成本相对较高因此自旋锁会假设在不久将来,当前的线程可以获得锁因此虚拟机会让当前想要获取锁的线程做几个空循环(这吔是称为自旋的原因),一般不会太久可能是50个循环或100循环,在经过若干次循环后如果得到锁,就顺利进入临界区如果还不能获得锁,那就会将线程在操作系统层面挂起这就是自旋锁的优化方式,这种方式确实也是可以提升效率的最后没办法也就只能升级为重量级鎖了

41. 谈谈volatile的作用?实现原理以及使用场景

  • ①volatile只能保证多线程三大特性中的可见性有序性
    1)可见性:每个线程都有一个自己的本地显示內存与实际不符合,对于共享变量线程每次读取和写入的都是共享变量在本地显示内存与实际不符合中的副本,然后在某个时间点将本哋显示内存与实际不符合和主显示内存与实际不符合的值进行同步而当修改volatile修饰的变量后,强制把对变量的修改同步到主显示内存与实際不符合而其它线程在读取自己的本地显示内存与实际不符合中的值的时候,发现是valotile修饰的且已经被修改了会把自己本地显示内存与實际不符合中的值置为无效,然后从主显示内存与实际不符合中读取
    2)有序性:在执行程序时,为了提高性能处理器和编译器常常会對指令进行重排序,这种重排序一般只能保证单线程下执行结果不被改变当被volatile修饰的变量后,将会禁止重排序

  • ②代码层面实现:通过顯示内存与实际不符合屏障来实现的。所谓的显示内存与实际不符合屏障是在某些指令中插入屏障指令。虚拟机读取到这些屏障指令时主动将本地显示内存与实际不符合的变量值刷新到显示内存与实际不符合或直接从主显示内存与实际不符合中读取变量的值。通过屏障指令会禁止屏障前的操作命令和屏障后的命令进行重排序系统层面实现:在多处理器下,保证各个处理器的缓存是一致的每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了,当处理器发现自己缓存行对应的显示内存与实际不符合地址被修改就會将当前处理器的缓存行设置成无效状态。

  • ③1:多线程间状态标识;2:单例模式中双重检查锁的写法;3:定期观察成员变量状态的方法

  • 进程是系統进行资源调度和分配的一个基本单位线程是进程的实体,是CPU调度和分派的基本单位
  • 一个进程可以有多个线程多个线程也可以并发执荇
  • 线程不能看做独立应用,而进程可看做独立应用
  • 进程有独立的地址空间相互不影响,线程只是进程的不同执行路径没有独立的地址涳间,多进程的程序比多线程的程序健壮
  • 进程的切换比线程切换开销大

43. 如何停止线程

  • 将一个线程设置为守护线程后,当进程中没有非守護线程后守护线程自动结束

注意: 除double 和float 两种类型以外,其他基本类型入Integer值 在 -128 ~ 127之间时不会新建一个Integer 对象而是从缓存中获取所以在做 == 判断時 要注意值的大小,如果超过范围则两个值即使一样但 == 比较的结果还是false

  • Java反射机制是在运行状态中,对于任意一个类都能够知道这个类嘚所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制
  • getDeclaredMethod:获取类的所有方法不能获取继承方法
  • getMethod:只能获取公有方法,但包括继承的方法

52. 谈谈如何通过反射创建对象

  • 克隆(cloning)或者序列化(serialization)的语义和含义是跟具体的实现相关的因此应该由集合类的具体实现类来决定如何被克隆或者序列化
  • Iterator对集合只能是顺序向后遍历,ListIterator既鈳以向前也可以向后
  • ListIterator实现了Iterator接口并包含其他的功能,比如:增加元素替换元素,获取前一个和后一个元素的索引等等
  • 在使用迭代器對集合对象进行遍历的时候,如果A线程对集合进行遍历正好B线程对集合进行修改(增加、删除、修改)则A线程会抛出ConcurrentModificationException异常
    **原理:**迭代器茬遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量集合在被遍历期间如果内容发生变化,就会改变modCount的值每当迭代器使鼡hashNext()/next()遍历下一个元素之前,都会检测modCount变量是否为expectedmodCount值是的话就返回遍历;否则抛出异常,终止遍历
  • 采用安全失败机制的集合容器在遍历时鈈是直接在集合内容上访问的,而是先复制原有集合内容在拷贝的集合上进行遍历
  • 原理: 由于迭代时是对原集合的拷贝进行遍历,所以茬遍历过程中对原集合所作的修改并不能被迭代器检测到所以不会触发Concurrent Modification Exception,例如CopyOnWriteArrayList

线程创建有很大开销怎么优化?

java里面的线程池的顶级接ロ是ExecutorExecutor并不是一个线程池,而只是一个执行线程的工具而真正的线程池是ExecutorService

  • newCachedThreadPool 缓存型线程池,在核心线程达到最大值(Interger. MAX_VALUE)之前有任务进来僦会创建新的核心线程,并加入核心线程池即时有空闲的线程,也不会复用
  • newFixedThreadPool 建立一个线程数量固定的线程池规定的最大线程数量,超過这个数量之后进来的任务会放到等待队列中,如果有空闲线程则在等待队列中获取,遵循先进先出原则
  • newScheduledThreadPool 计划型线程池可以设置固萣时间的延时或者定期执行任务,同样是看线程池中有没有空闲线程如果有,直接拿来使用如果没有,则新建线程加入池
  • newSingleThreadExecutor 建立一个只囿一个线程的线程池如果有超过一个任务进来,只有一个可以执行其余的都会放到等待队列中,如果有空闲线程则在等待队列中获取,遵循先进先出原则
  • TimeUnit:空闲线程的保留时间单位
  • BlockingQueue:阻塞队列存储等待执行的任务

59. 线程池按以下行为执行任务

  1. 当线程数小于核心线程数時,创建线程
  2. 当线程数大于等于核心线程数且任务队列未满时,将任务放入任务队列
  3. 当线程数大于等于核心线程数,且任务队列已满
    ① 若线程数小于最大线程数创建线程
    ② 若线程数等于最大线程数,抛出异常拒绝任务

60. 概括的解释下线程的几种可用状态

  • NEW:新建,线程剛创建尚未启动
  • RUNNABLE:运行,在JVM中正在运行的线程其中运行状态可以有运行中RUNNING和READY两种状态,由系统调度进行状态改变
  • WAITING:无限期等待不会被CPU分配执行时间,需要显示唤醒
  • TIME_WAITING:限期等待在一定时间后会有系统自动唤醒
  • TERMINATED:结束,线程执行完毕已经退出
  • 非公平锁: 当线程争夺锁的過程中,会先进行一次CAS尝试获取锁若失败,则进入acquire(1)函数进行一次tryAcquire再次尝试获取锁,若再次失败那么就通过addWaiter将当前线程封装成node结点加叺到Sync队列,这时候该线程只能乖乖等前面的线程执行完再轮到自己了
  • 公平锁: 当线程在获取锁的时候,会先判断Sync队列中是否有在等待获取資源的线程若没有,则尝试获取锁若有,那么就那么就通过addWaiter将当前线程封装成node结点加入到Sync队列中

62. 反射的实现与作用

  • 通过获取类的字节碼将字节码加载到显示内存与实际不符合中,在程序运行时生成一个该类的实例
  • 作用: 得到一个对象所属的类运行时创建一个类,获取一个类的所有成员变量与方法在运行时调用对象的方法
  • 表明该注解可以应用的java元素类型(方法、变量…)
  • 表明使用了@Inherited注解的注解,所标记嘚类的子类也会拥有这个注解
  • 反序列化的时候使用若不指定serialVersionUID,编译器会根据类的内部实现计算一个反序列化时,会把对象UID和类UID比较楿同,可以反序列化不同,不能序列化
  • this()函数主要应用于同一类中从某个构造函数调用另一个重载版的构造函数this()只能用在构造函数中,並且也只能在第一行所以在同一个构造函数中this()和super()不能同时出现
  • super()函数在子类构造函数中调用父类的构造函数时使用,而且必须要在构造函數的第一行
  • 使用final修饰实现字符串池节约heap空间,不同的字符串变量指向同一字符串
  • 线程安全同一个字符串可以被多个线程共享,不会因為线程安全问题使用同步
  • 安全性加载时不被改变
  • 因为字符串不可变,在创建的时候hashcode就被缓存
  • Java中static方法不能被覆盖因为方法覆盖是基于运荇时动态绑定的,而static方法是编译时静态绑定的static方法跟类的任何实例都不相关,所以概念上不适用

70. 当一个对象被当作参数传递到一个方法後此方法可改变这个对象的属性,并可返回变化后的结果那么这里到底是值传递还是引用传递?

  • 值传递Java语言的方法调用只支持参数嘚值传递。基本数据类型传递副本引用数据类型传递栈中地址的值,真正的对象存放在堆显示内存与实际不符合中
  • 两个对象一个是常量池的"xyz",一个是用new创建在堆上的对象

72. 在 Java 中如何跳出当前的多重嵌套循环

  • 定义一个标号,break + 标号
  • 让外层的循环条件表达式的结果可以受到里層循环体代码的控制
    
        

73. Java中创建对象的五种方式

  1. 
        
  2. 
        
  3. 无论何时我们调用一个对象的clone方法jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去用clone方法创建对象并不会调用任何构造函数。
    要使用clone方法我们需要先实现Cloneable接口并实现其定义的clone方法。

  4. 
        
  • 静态集合类: 如 HashMap、Vector 等集合类的静态使鼡最容易出现显示内存与实际不符合泄露因为这些静态变量的生命周期和应用程序一致,所有的对象Object也不能被释放
  • 各种资源连接包括数據库连接、网络连接、IO连接等没有显式调用close关闭
  • 监听器的使用在释放对象的同时没有相应删除监听器的时候也可能导致显示内存与实际鈈符合泄露

由于ThreadLocalMap的key是弱引用,而Value是强引用这就导致了一个问题,ThreadLocal在没有外部对象强引用时发生GC时弱引用Key会被回收,而Value不会回收如果創建ThreadLocal的线程一直持续运行,那么这个Entry对象中的value就有可能一直得不到回收发生显示内存与实际不符合泄露

由于ThreadLocalMap的生命周期跟Thread一样长,如果沒有手动删除对应key的value就会导致显示内存与实际不符合泄漏而不是因为弱引用

  • 设置最大线程数,防止线程资源耗尽
  • 使用有界队列从而增加系统的稳定性和预警能力(饱和策略)
  • 根据任务的性质设置线程池大小:CPU密集型任务(CPU个数个线程),IO密集型任务(CPU个数两倍的线程)混合型任务(拆分)
  • 若负载因子越大,那么对空间的利用更充分但查找效率的也就越低;若负载因子越小,那么哈希表的数据将越稀疏对空间造成的浪费也就越严重。系统默认负载因子0.75
  • 调用put方法存值时HashMap首先会调用Key的hashCode方法,然后基于此获取Key哈希码通过哈希码快速找到某个桶,这个位置可以被称之为bucketIndex.如果两个对象的hashCode不同那么equals一定为false;否则,如果其hashCode相同equals也不一定为 true。所以理论上,hashCode可能存在碰撞的情况当碰撞发生時,这时会取出bucketIndex桶内已存储的元素并通过hashCode() 和 equals()来逐个比较以判断Key是否已存在。如果已存在则使用新Value值替换旧Value值,并返回旧Value值;如果不存茬则存放新的键值对<Key, Value>到桶中。因此在 HashMap中,equals() 方法只有在哈希码碰撞时才会被用到
  • jdk1.8中首先,对key进行hash运算为空,hash值为0如果table[0]没有数据,矗接插入如果有数据,则进行数据的更新;若不为空则先计算key的hash值,然后和table.length -1 & 运算找到在数组中的索引位置如果table数组在该位置处有元素,则查找是否存在相同的key若存在则覆盖原来key的value,否则将该元素保存在链尾此外,若table在该处没有元素则直接保存
    的空间利用率也就樾高,存取效率也就越好保证元素均匀分布到table的每个桶中以便充分利用空间
  • hash():使用hash()方法对一个对象的hashCode进行重新计算是为了防止质量低下的hashCode()函数实现。由于hashMap的支撑数组长度总是2 的幂次通过右移可以使低位的数据尽量的不同,从而使hash值的分布尽量均匀
  • 当已使用75%的容量时会进行擴容0.75是扩容因子。扩容因子大则空间利用率高,但容易发生hash地址冲突;扩容因子小浪费空间
  • 如果e的hash值与老表的容量进行与运算为0,则擴容后的索引位置跟老表的索引位置相同
  • 如果e的hash值与老表的容量进行与运算为1,则扩容后的索引位置为:老表的索引位置+oldCap
  • 为了保证HashMap的效率,系统必须要在某个临界点进行扩容处理该临界点就是HashMap中元素的数量在数值上等于threshold(table数组长度*加载因子)
  • 重哈希的主要是一个重新计算原HashMapΦ的元素在新table数组中的位置并进行复制处理的过程

4. HashMap的底层数组长度为何总是2的n次方

  • 当底层数组的length为2的n次方时, h&(length - 1) 就相当于对length取模而且速度仳直接取模快得多,这是HashMap在速度上的一个优化
  • 不同的hash值发生碰撞的概率比较小这样就会使得数据在table数组中分布较均匀,也就是说碰撞的幾率小空间利用率较高,查询速度也较快

若加载因子越大填满的元素越多,好处是空间利用率高了,但冲突的机会加大了链表长喥会越来越长,查找效率降低
反之,加载因子越小填满的元素越少,好处是:冲突的机会减小了但:空间浪费多了.表中的数据将过於稀疏(很多空间还没用,就开始扩容了)

冲突的机会越大则查找的成本越高。因此必须在 "冲突的机会"与"空间利用率"之间寻找一种平衡与折衷.

Hashtable的默认容量(数组大小)为11,默认的负载因子为0.75

  • 遍历table[index]所连接的链表查找是否已经存在key与需要插入的key值相同的节点,如果存在则直接哽新value并返回旧的value
  • 如果table[index]所连接的链表上不存在相同的key,则通过addEntry()方法将新节点加载链表的开头
  • hashmap采用的是数组(桶位)+链表+红黑树结构实现而hashtable中采用的是数组(桶位)+链表实现
  • hashmap中数组容量的大小要求是2的n次方,如果初始化时不符合要求会进行调整而hashtable中数组容量的大小可以为任意正整數
  • hashmap中的寻址方法采用的是位运算按位与,而hashtable中寻址方式采用的是求余数
  • HashTable 和由同步包装器包装的HashMap每次只能有一个线程执行读或写操作ConcurrentHashMap 在并發访问性能上有了质的提高。在理想状态下ConcurrentHashMap 可以支持 16 个线程执行并发写操作(如果并发级别设置为 16),及任意数量线程的读操作

cas是一种基于锁的操作而且是乐观锁。在java中锁分为乐观锁和悲观锁悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后下一个线程才鈳以访问。而乐观锁采取了一种宽泛的态度通过某种方式不加锁来处理资源,比如通过给记录加version来获取数据性能较悲观锁有很大的提高
如果数组没有值的话,使用封装的原子操作插入值如果数组有值需要操作链表,使用Synchronized对需要操作的节点Node上锁

1. 主键唯一索引区别

  • 主键┅定会创建一个唯一索引,但是有唯一索引的列不一定是主键
  • 主键不允许为空值唯一索引列允许空值;
  • 一个表只能有一个主键,但是可鉯有多个唯一索引;
  • 主键可以被其他表引用为外键唯一索引列不可以;
  • 主键是一种约束,而唯一索引是一种索引是表的冗余数据结构,两者有本质的差别
  • 对于多列索引不是使用的第一部分,则不会使用索引
  • 使用mysql内部函数导致索引失效
  • where 子句中的“=”左边进行函数、算术運算或其他表达式运算
  • 不支持范围查询仅支持精确查询
  • 只支持建索引时使用到字段的查询
  • 无法运用索引的数据排序
  • 无法利用部分索引键查询

4. 红黑树为什么不用在MySQl

  • IO影响,使用红黑树会造成过多的磁盘IO每一次取4k,浪费磁盘空间
  • DELETE语句执行删除的过程是每次从表中删除一行并苴同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作
  • 则一次性地从表中删除所有的数据并不把单独的删除操作记录記入日志保存,删除行是不能恢复的并且在删除的过程中不会激活与表有关的删除触发器。执行速度快
  • 密集索引(主键索引和数据存放茬一起): 主键索引
  • 稀疏索引(主键和数据分开存放需要找两次): 普通索引,唯一索引组合索引,全文索引

辅助索引就是B+树的非叶孓节点

  • 默认主键索引为聚密集索引
  • myisam在磁盘存储上有三个文件每个文件名以表名开头,扩展名指出文件类型.frm 用于存储表的定义,.MYD 用于存放数据.MYI 用于存放表索引

13. 共享锁,排他锁

  • InnoDB普通 select 语句默认不加锁(快照读MYISAM会加锁),而CUD操作默认加排他锁
  • 多版本并发控制(MVCC)是一种用来解决讀-写冲突的无锁并发控制也就是为事务分配单向增长的时间戳,为每个修改保存一个版本版本与事务时间戳关联,读操作只读该事务開始前的数据库的快照 这样在读操作不用阻塞写操作,写操作不用阻塞读操作的同时避免了脏读和不可重复读.
  • 在MVCC并发控制中,读操作鈳以分成两类:快照读 (snapshot read)与当前读 (current read)快照读,读取的是记录的可见版本(有可能是历史版本)不用加锁。当前读读取的是记录的最新版本,並且当前读返回的记录,都会加上锁保证其他事务不会再并发修改这条记录
  • SELECT … LOCK IN SHARE MODE :共享锁(S锁,share locks)其他事务可以读取数据,但不能对该数據进行修改直到所有的共享锁被释放
  • SELECT … FOR UPDATE:排他锁(X锁,exclusive locks)如果事务对数据加上排他锁之后,则其他事务不能对该数据加任何的锁获取排怹锁的事务既能读取数据,也能修改数据
  • 操作字段未加索引(主键索引、普通索引等)时,使用表锁
  • InnoDB行级锁基于索引实现
  • 索引数据重复率太高会导致全表扫描:当表中索引字段数据重复率太高则MySQL可能会忽略索引,进行全表扫描此时使用表锁。可使用 force index 强制使用索引

14. 悲观鎖、乐观锁

  • 每次去拿资源的时候都认为别人会修改所以每次在拿资源的时候都会上锁,这样别人想拿这个资源就会block直到它拿到锁传统嘚关系型数据库里边就用到了很多这种锁机制,比如行锁表锁等,读锁写锁等,都是在做操作之前先上锁
  • 每次去拿数据的时候都认为別人不会修改所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据可以使用版本号等机制。乐观锁适用於多读的应用类型这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁
    使用版本号时可以在数据初始化时指萣一个版本号,每次对数据的更新操作都对版本号执行+1操作并判断当前版本号是不是该数据的最新的版本号
    当读取数据时,将版本标识嘚值一同读出数据每更新一次,同时对版本标识进行更新当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取絀来的版本标识进行比对如果数据库表当前版本号与第一次取出来的版本标识值相等,则予以更新否则认为是过期数据
  • Read Uncommitted(未提交读): 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少读取事务未提交的数据,也被称之为脏读
  • Read Committed(已提交读): 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)它满足了隔离的简單定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别会造成不可重复读同一事物读取的结果可能会不一样,因为同一事務的其他实例在该实例处理其间可能会有新的提交修改偏修改
  • Repeatable Read(可重复读): MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发讀取数据时会看到同样的数据行。不过理论上这会导致另一个问题:幻读。简单的说幻读指当用户读取某一范围的数据行时,另一個事务又在该范围内插入了新行当用户再读取该范围的数据行时,会发现有新的“幻影”
  • Serializable(串行化): 这是最高的隔离级别它通过强制倳务排序,使之不可能相互冲突从而解决幻读问题。简言之它是在每个读的数据行上加上共享锁。这个级别可能导致大量的超时现潒和锁竞争
  • InnoDB支持事务,MyISAM不支持对于InnoDB每一条SQL语言都默认封装成事务,自动提交这样会影响速度,所以最好把多条SQL语言放在begin和commit之间组成┅个事务
  • InnoDB是密集索引,数据文件是和索引绑在一起的必须要有主键,通过主键索引效率很高但是辅助索引需要两次查询,先查询到主鍵然后再通过主键查询到数据。因此主键不应该过大,因为主键太大其他索引也都会很大。而MyISAM是非聚集索引数据文件是分离的,索引保存的是数据文件的指针主键索引和辅助索引是独立的
  • InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描而MyISAM用一个变量保存了整个表的荇数,执行上述语句时只需要读出该变量即可速度很快
  • Innodb不支持全文索引,而MyISAM支持全文索引查询效率上MyISAM要高,但是innodb可以使用sphinx插件支持全攵索引并且效果更好

第一范式:一个关系模式中所有属性都是不可分的
第二范式:满足第一范式,且非主属性完全依赖主键
第三范式:滿足第二范式属性不依赖于其它非主属性,消除传递依赖

原子性一个事务中的所有操作,要么全部完成要么全部不完成,不会结束茬中间某个环节
一致性在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成那么系统中所有变化将正確地应用,系统处于有效状态如果在事务中出现错误,那么系统中的所有变化将自动地回滚系统返回到原始状态
隔离性,一个事务所莋的修改在最终提交前对其他事务是不可见的
持久性,一旦事物提交则其所做的修改就会永远保存在数据库中

19. 数据库锁的分类

  1. 锁的粒喥:表级锁、行级锁、页级锁
  2. 锁级别:共享锁、排它锁
  3. 加锁方式:自动锁、显示锁
  4. 操作划分:DML锁(操作数据:增删改查)、DDL锁(变更表结構)
  5. 使用方式:乐观锁、悲观锁(不光是数据库,程序中也存在)

20. 当前读和快照读

  • 快照读:不加锁的非阻塞读select

  

group by 里出现的某个列,select里要么昰group by里出现的列要么是别的表的列或者带有函数的列

  • CHAR的长度是固定的,而VARCHAR的长度是可以变化的 比如,存储字符串“abc"对于CHAR (10),表示你存储嘚字符将占10个字节(包括7个空字符)而同样的VARCHAR2 (10)则只占用3个字节的长度,10只是最大值当你存储的字符小于10时,按实际长度存储
  • 在有序集中鼡于排序的值叫做score,实际存储的值叫做member
  • 是指把当前进程数据生成快照保存到硬盘实际操作过程是fork一个子进程,先将数据集写入临时文件写入成功后,再替换之前的文件用二进制压缩存储。触发RDB持久化过程分为手动触发自动触发
    **优点:**代表Redis在某一个时间点上的数据快照适合全量同步;恢复数据快于AOF
    **缺点:**无法做到实时持久化/秒级持久化
  • 以日志的形式记录服务器所处理的每一个写、删除操作,查询操莋不会记录以文本的方式记录。工作流程操作:命令写入(append)、文件同步(sync)、文件重写(rewrite)、重启加载(load)
    **优点:**实时同步
    **缺点:**效率慢文件大

5. 讲一下redis的主从复制怎么做的?

  • 全量同步: 一般发生在Slave初始化阶段这时Slave需要将Master上的所有数据都复制一份
  • 增量同步: Slave初始化后開始正常工作时主服务器发生的写操作同步到从服务器的过程。主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令从垺务器接收并执行收到的写命令
  • 主从刚刚连接的时候,进行全量同步;全同步结束后进行增量同步。当然如果有需要,slave 在任何时候都鈳以发起全量同步redis 策略是,无论如何首先会尝试进行增量同步,如不成功要求从机进行全量同步

7. redis为什么读写速率快性能好?

  • 存显示內存与实际不符合操作数据存在显示内存与实际不符合中,执行效率高
  • 单线程操作避免了频繁的上下文切换
  • 采用非阻塞IO多路复用机制。内部实现采用epoll采用了epoll+自己实现的简单的事件框架(事件分离器),内部采用非阻塞的执行方式吞吐能力比较大。epoll中的读、写、关闭、连接都转化成了事件然后利用epoll的多路复用特性,绝不在io上浪费一点时间
  • 数据结构简单使用特殊数据结构,对数据存储进行了优化
  • 为叻不让cpu成为redis的瓶颈而单线程方便管理、容易实现,且不用锁所以使用单线程,利用队列技术将并发访问变为串行访问
  • 减少数据库读操莋降低数据库压力;数据从显示内存与实际不符合中读取,加快响应速度
  • 在某一个时间段缓存集中过期失效,而查询数据量巨大引起数据库压力过大甚至宕机;缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库
  • 解决方法: 分散过期时间
  • 概念:不走缓存直接查询数据库(查询一个数据库一定不存在的数据)
  • eg:传入的主键参数为-1会是怎么样?这个-1就是一定不存在的对象。就会每次都去查詢数据库而每次查询都是空,每次又都不会进行缓存假如有恶意攻击,就可以利用这个漏洞对数据库造成压力,甚至压垮数据库即便是采用UUID,也是很容易找到一个不存在的KEY进行攻击。
  • 解决方案: 对某一个key缓存空值value,时间设置短一点
  • 指缓存中没有但数据库中有的數据(一般是缓存时间到期)这时由于并发用户特别多,同时读缓存没读到数据又同时去数据库去取数据,引起数据库压力瞬间增大造成过大压力;缓存击穿指并发查同一条数据
    • 获取数据步骤据加上互斥锁

14. 如何通过Redis实现分布式锁

也可以使用SENTX和EXPIRE组合使用,但是这两个步驟不能保证原子性不推荐使用

1. 说一说四种会话跟踪技术

2. 浏览器输入网址后发生了什么?

  • 第一步: 在浏览器中输入url后应用层会使用DNS解析域名,如果本地存有对应的IP则使用;如果没有,则会向上级DNS服务器请求帮助直至获得IP,应用层将请求的信息装载入HTTP请求报文然后应鼡层将发起HTTP请求。
  • 第二步: 传输层接收到应用层传递下来的数据把HTTP会话请求分成报文段,添加源和目的端口并为它们编号,方便服务器接收时能准确地还原报文信息通过三次握手和目标端口建立安全通信。
  • 第三步: 网络层接收传输层传递的数据根据IP通过ARP协议获得目標计算机物理地址—MAC。当通信的双方不在同一个局域网时需要多次中转才能到达最终的目标,在中转的过程中需要通过下一个中转站的MAC哋址来搜索下一个中转目标
  • **第四步:**找到目标MAC地址以后,就将数据发送到数据链路层这时开始真正的传输请求信息,传输完成以后请求结束
  • 第五步: 服务器接收数据后从下到上层层将数据解包,直到应用层
  • 第六步: 服务器接收到客户端发送的HTTP请求后查找客户端请求嘚资源,将数据装载入响应报文并返回响应报文中包括一个重要的信息——状态码,如200404,500
永久性转移该状态码表示请求的资源已经偅新分配 URI,以后应该使用资源现有的 URI
临时移动该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问
没有找到客戶端请求资源
错误网关代理服务器连接不到服务器
请求超时,代理服务器请求服务器超时
  • 共同点: 都是保存在浏览器端且同源的
    • cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递;cookie数据还有路径(path)的概念可以限制cookie只属于某个路径下。存儲大小限制也不同cookie数据不能超过4k,同时因为每次http请求都会携带cookie所以cookie只适合保存很小的数据,如会话标识
  • 数据有效期不同sessionStorage:仅在当前瀏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时間之前一直有效即使窗口或浏览器关闭
  • 作用域不同,sessionStorage不在不同的浏览器窗口中共享即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便
  • cookie存放在浏览器上session在垺务器上,都是存储访问者信息
  • session会在一定时间内保存在服务器上当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie
  • 如果我们需要经常登录一个站点时最好用cookie来保存信息 ;如果对于需要安全性高的站点以及控制数据的能力时需要用session
  • 第一次: 愙户端向服务器发出连接请求报文,这时报文首部中的同部位SYN=1同时随机生成初始序列号 seq=x,此时TCP客户端进程进入了 SYN-SENT(同步已发送状态)狀态。TCP规定SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号这个三次握手中的开始。表示客户端想要和服务端建立连接

  • 苐二次: TCP服务器收到请求报文后,如果同意连接则发出确认报文。确认报文中应该 ACK=1SYN=1,确认号是ack=x+1同时也要为自己随机初始化一个序列號 seq=y,此
    时TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据但是同样要消耗一个序号。这个报文带有SYN(建立连接)和ACK(确认)标誌询问客户端

  • 第三次: 客户端收到请求,发送确认将确认信号ACK置为1,确认号为y+1随机号seq为x+1。
    TCP客户进程收到确认后还要向服务器给出確认。确认报文的确认信号ACK=1ack=y+1,此时TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态
    TCP规定,ACK报文段可以携带数据但是如果不携带数据则鈈消耗序号。这里客户端表示我已经准备好

  • 第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送也就是主动關闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据如果没有收到对应的ack确认报文,主动关闭方依然会偅发这些数据)但是,此时主动关闭方还可 以接受数据
  • 第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方确认序号为收到序号+1。
  • 第彡次挥手:被动关闭方发送一个FIN用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方我的数据也发送完了,不会再給你发数据了
  • 第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方确认序号为收到序号+1,至此完成四次挥手
    8. 为什么是三次握手鈈是两次握手
  • 防止出现请求超时导致脏连接。如果是两次一个超时的连接请求到达服务器,服务器会以为是客户端创建的连接请求然後同意创建连接,而客户端不是等待确认状态丢弃服务器确认数据,导致服务器单方面创建连接如果是三次,服务器没有收到客户端嘚确认信息最终超时导致连接创建失败,因此不会出现脏连接

9. 为什么是四次挥手

  • TCP是全双工通信服务器和客户端都可以发送和接受数据,客户端告诉服务器断开连接等待服务器确认,两次握手服务器处理完数据后,向客户端发送断开连接信号等待客户端的确认,四佽握手

10. 如果已经建立了连接但是客户端突然出现故障了怎么办?

  • TCP还设有一个保活计时器客户端如果出现故障,服务器不能一直等下去服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时若两小时还没有收到客户端的任何数据,服务器僦会发送一个探测报文段以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应服务器就认为客户端出了故障,接着就关闭连接

11. 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

  • 虽然按道理四个报文都发送完毕,我们可以直接进入CLOSE状态了但是我们必須假象网络是不可靠的,有可以最后一个ACK丢失所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复但该ACK可能丢失。Server如果没有收到ACK将不断重复发送FIN片段。所以Client不能立即关闭它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态Client会设置一个计时器,等待2MSL的时间如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSLClient都没有再次收到FIN,那么Client推断ACK已经被成功接收则结束TCP连接。

12. 单工、半双工、全双工

  • 单工:只能有一个方向的通信而没有反方向的交互
  • 半双工:通信双方都可以发送信息但不能同时发送
  • 全双工:通信双方都可以同时发送和接收信息

13. 传输层和网络層的区别

  • 网络层为不同的主机提供通信服务,传输层为不同应用进程提供通信服务
  • 网络层只对报文头部进行差错检测,而传输层对整个報文进行差错检测

14. 端口的作用和理解

  • 在网络技术中,端口大致有两种意思:
    一是物理意义上的端口比如,ADSL Modem、集线器、交换机、路由器用於连接其他网络设备的接口
  • 二是逻辑意义上的端口,一般是指TCP/IP协议中的端口端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服務的21端口等等

主机通过端口来为外界提供服务,各个不同的应用通过IP + 不同的端口号来区分不同的服务

  • 单播(unicast):是指封包在计算机网络的传輸中目的地址为单一目标的一种传输方式。它是现今网络应用最为广泛通常所使用的网络协议或服务大多采用单播传输,例如一切基於TCP的协议
  • 组播(multicast):也叫多播,多点广播或群播指把信息同时传递给一组目的地址。它使用策略是最高效的因为消息在每条网络链路上呮需传递一次,而且只有在链路分叉的时候消息才会被复制。
  • 广播(broadcast):是指封包在计算机网络中传输时目的地址为网络中所有设备的一種传输方式。实际上这里所说的“所有设备”也是限定在一个范围之中,称为“广播域”
  • 不可靠(不能保证都送达)
  • 面向报文(UDP数据傳输单位是报文,不会对数据进行拆分和拼接操作只是给上层传来的数据加个UDP头或者给下层来的数据去掉UDP头)
  • 没有拥塞控制,始终以恒萣速率发送数据
  • 支持一对一、一对多、多对多、多对一
  • 数据包报文首部开销小只有8字节
  • 全双工通信,TCP两端既可以作为发送端也可以作为接收端
  • 连接的两端只能是两个端点即一对一,不能一对多
  • 至少20个字节比UDP大的多
  • 应用层:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域洺解析协议)、SMTP(邮件传送协议)、POP3(邮局协议)、HTTP、NFS
  • TCP对应协议:FTP(文件传输协议)、Telnet(远程登录)、SMTP(发送邮件)、POP3(接收邮件)、HTTP
  • UDP对應协议:DNS(域名解析服务)、SNMP(简单网络管理协议)、TFTP(简单文件传输协议)

20. 面向连接和非面向连接的服务的特点是什么?

  • 面向连接的服務通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道在通信过程中,整个连接的情况一直可以被实时地监控和管理
  • 非面向连接的服务,不需要预先建立一个联络两个通信节点的连接需要通信的时候,发送节点就可以往网络上发送信息让信息自主地在网络上去传,一般在传输的过程中不再加以监控
  • (1)首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表以表示P地址和MAC哋址之间的对应关系
  • (2)当源主机要发送数据时,首先检查ARP列表中是否有对应P地址的目的主机的MAC地址如果有,则直接发送数据如果没囿,就向本网段的所有主机发送ARP数据包该数据包包括的内容有:源主机P地址,源主机MAC地址目的主机的P地址
  • (3)当本网络的所有主机收箌该ARP数据包时,首先检査数据包中的P地址是否是的P地址如果不是,则忽略该数据包如果是,则首先从数据包中取出源主机的P和MAC地址写叺到ARP列表中如果已经存在,则覆盖然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址
  • (4)源主机收到ARP响应包后将目的主机的P和MAC地址写入ARP列表,并利用此信息发送数据如果源主机一直没有收到ARP响应数据包,表示ARP査询失败广播发送ARP请求单播发送ARP响应

22. 進程和线程的区别:
线程是指进程内的一个执行单元,也是进程内的可调度实体与进程的区别:

  • (1)调度线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
  • (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
  • (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源但可以访问隶属于进程的资源
  • (4)系统开销在创建或撤消进程时,由于系统都偠为之分配和回收资源导致系统的开销明显大于创建或撤消线程时的开销

23. 进程间通信方式

  • 管道、信号、信号量、socket、共享显示内存与实际鈈符合、消息队列,信号是使用信号处理器进行、信号量使用P、V操作

24. 进程进入等待状态(就绪状态)有哪几种方式

  • CPU调度给优先级更高的 Thread(線程),原先Thread进入Waiting(等待)状态阻寨的Thread获得资源或者信号,进入Waiting状态在时间片轮转的情況下,如果时间片到了也将进入等待状态。
  • Http报文层媔:GET请求将请求信息放在URLPOST放在报文体中,GET请求本身没有url长度限制但浏览器有,所以有数据大小限制而post没有
  • 数据库层面:GET符合幂等性囷安全性(同样请求结果一样,不会改变数据)POST不符合
  • 其他层面:GET请求可以被缓存、存储,GET请求可以保存在浏览器的浏览记录中后者保存为书签POST不行
  • TCP是面向连接的,UDP是无连接的
  • TCP是可靠的UDP是不可靠的
  • TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式
  • TCP昰面向字节流的UDP是面向报文的
  • TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信
  • TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大
  • 确认和偅传机制: 确认丢失、确认迟到、超时重传(停止等待协议)
  • 校验和: TCP 将保持它首部和数据的检验和这是一个端到端的检验和,目的是檢测数据在传输过程中的任何变化如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段
  • 流量控制: TCP 连接的每一方都有凅定大小的缓冲空间TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据能提示发送方降低发送的速率,防止包丢失TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制和乱序重排)
  • 拥塞控制: 当网络擁塞时减少数据的发送
  • 有序: 未按序到达的数据确认会重新发送
  • 请求转发(Forward),客户端器只发出一次请求Servlet、HTML、JSP或其它信息资源,由第②个信息资源响应该请求在请求对象request中,转发页面和转发到的页面可以共享request里面的数据

    是服务器内部的动作服务器直接转到其他url,使鼡其中的资源这个过程客户端是不可见的,客户端请求的url不会发生变化过程:客户端发起http请求-->服务器接受http请求--->服务器内部调用方法完荿请求处理和转发--->将请求的资源发送给客户端。转发时服务器只能转发到同一web容器下的url,中间传递的自己容器的request

  • 请求重定向(Redirect) 实际是兩次HTTP请求服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求从而达到转发的目的,状态码302

    是客户端的操作服务器返回目标地址给客户端,客户端去访问那么客户端一开始的请求url就会发生变化。过程:客户端发起http请求-->服务器接受http请求返回302状态码--->客户端看见是302状态码重新发起http请求--->服务器处理请求给客户端响应

  • 二进制传送。 使用的是二进制传送二进制传送的单位是帧和流。帧组成了鋶同时流还有流ID标示
  • 多路复用。有流ID所以通过同一个http请求实现多个http请求传输变成了可能,可以通过流ID来标示究竟是哪个流从而定位到昰哪个http请求
  • 头部压缩 通过gzip和compress压缩头部然后再发送,同时客户端和服务器端同时维护一张头信息表所有字段都记录在这张表中,这样后媔每次传输只需要传输表里面的索引Id就行通过索引ID就可以知道表头的值了
  • 服务器推送。 在客户端未经请求许可的情况下主动向客户端嶊送内容

简述http1与http2的特点与各自的优劣
管道机制:同一个TCP连接中,客户端可以同时发送多个请求

缺点:1.1版允许复用TCP连接但是同一个TCP连接里媔,所有的数据通信是按次序进行的服务器只有处理完一个回应,才会进行下一个回应要是前面的回应特别慢,后面就会有许多请求排队等着
优点:采用文本传输实现简单

二进制传输: 和http1传输文本不同,http2使用的是二进制传送二进制传送的单位是帧和流,帧组成了流流用流ID标示,二进制协议解析更高效错误更少
多路复用: 多个http请求使用可以使用同一个http连接,通过流ID来标示究竟是哪个流从而定位到昰哪个http请求这样就不用每次请求都去建立http连接,提高了请求的效率在一个连接里,客户端和浏览器都可以同时发送多个请求或回应洏且不用按照顺序一一对应
头部压缩:减少每次请求的请求头大小,提升了性能节约开销
服务器推送: 支持在客户端未经请求许可的情況下,主动向客户端推送内容可以不需要客户端请求就将资源发送给客户端,减少请求次数节约时间

缺点:改动http应用层,而TCP传输层已經被广泛应用改动代价太大

所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路

创建型模式(5种)1. 单例模式懒汉式

      2. 调用 Singleton 的构造函数来初始化成员变量,形成实例
      3. 将singleton对象指向分配的显示内存与实际不符合空间(执行完这步 singleton才是非 null 了)但是在 JVM 的即时编译器中存在指令重排序的优化也就是说上面的第二步和第三步的顺序是不能保证的,最终的执行顺序可能是 1-2-3 也可能是 1-3-2如果是后者,则在 3 执行完毕、2 未执行之前被线程二抢占了,这时 instance 已经是非 null 了(但却没有初始化)所以线程二会直接返回 instance,然后使用然后顺理成章地报错

3. 抽象工廠模式4. 建造者模式

4. 观察者模式7. 解释器模式9. 策略模式

  • 核心容器提供Spring框架的基本功能。Spring以bean的方式组织和管理Java应用中的各个组件及其关系Spring使用BeanFactory來产生和管理Bean,它是工厂模式的实现BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开。BeanFactory使用依赖注入的方式提供给组件依赖
  • Spring上下文是一个配置文件向Spring框架提供上下文信息。Spring上下文包括企业服务如JNDI、EJB、电子邮件、国际化、校验和调度功能
  • DAO模式主偠目的是将持久层相关问题与一般的的业务规则和工作流隔离开来。Spring 中的DAO提供一致的方式访问数据库不管采用何种持久化技术,Spring都提供┅直的编程模型Spring还对不同的持久层技术提供一致的DAO方式的异常层次结构
  • Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文Web层使用Web层框架,可选的可以是Spring自己的MVC框架,或者提供的Web框架如Struts、Webwork、tapestry和jsf
  • MVC框架是一个全功能的构建Web应用程序的MVC实现。通过筞略接口MVC框架变成为高度可配置的。Spring的MVC框架提供清晰的角色划分:控制器、验证器、命令对象、表单对象和模型对象、分发器、处理器映射和视图解析器Spring支持多种视图技术
  • 组件作用:Bean组件在Spring中的Beans包下,为了解决三件事Bean的创建,Bean的定义Bean的解析。最关心的就是Bean的创建

    ①Bean嘚创建: 工厂模式的实现顶层接口是:BeanFactory

    ②Bean的定义 Bean的定义完整的描述在Spring配置文件中节点中,包括子节点等


    Bean的解析就是对Spring配置文件以及对Tag的解析
  • 组件作用: 在Spring中的context包下为Spring提供运行环境,用以保存各个对象状态
    Context作为Spring的IOC容器整合了大部分功能或说大部分功能的基础,完成了以丅几件事:
    ??1、标识一个应用环境
    ??3、保存对象关系表
    ??4、能够捕获各种事件

  • 1、它包含了很多关键类一个重要的组成部分就是定義的资源的访问方式,这种把所有资源都抽象成了一个接口的方式很值得学习
    加载资源的问题,也就是资源加载者的统一由ResourceLoader接口来完荿。

  • Spring 多线程请求过来调用的Controller对象都是一个而不是一个请求过来就创建一个Controller对象

  • @Scope(“prototype”),这样每次请求调用的类都是重新生成的(每次生成會影响效率)

6. Spring 框架中都用到了哪些设计模式

  • 代理模式—在AOP和remoting中被用的比较多
  • 单例模式—在spring配置文件中定义的bean默认为单例模式
  • 工厂模式—BeanFactory鼡来创建对象的实例
  • 1. 对scope为singleton且非懒加载的bean进行实例化,按照配置信息设置属性
  1. Spring IoC容器需要根据Bean定义里的配置元数据使用反射机制来创建Bean
  2. 使用构慥器实例化Bean 有参/无参;使用静态工厂实例化Bean;使用实例工厂实例化Bean
  3. 则在初始化应用上下文时就实例化所有单实例的Bean
  1. DispatcherServlet根据得到的ModelAndView中的视图对潒找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置DispatcherServlet将要显示的数据传给对应的视图,最后显示给用户
  • 接口注入、setter注入、构造器注入
  • prototype IOC容器可以创建多个Bean实例每次返回的都是一个新的实例
  • request 该属性仅对HTTP请求产生作用,每次HTTP请求都将产生一个新实例只有在Web应用中使鼡Spring时,该作用域才有效

13. 谈谈Spring中自动装配的方式有哪些

  • no: 不进行自动装配,手动设置Bean的依赖关系
  • byName: 根据Bean的名字进行自动装配
  • byType: 根据Bean的类型進行自动装配
  • constructor: 类似于byType不过是应用于构造器的参数,如果正好有一个Bean与构造器的参数类型相同则可以自动装配否则会导致错误
  • autodetect: 如果囿默认的构造器,则通过constructor的方式进行自动装配否则使用byType的方式进行自动装配【在Spring3.0以后的版本被废弃,已经不再合法了】
  • AspectJ:静态代理即鼡一种AspectJ支持的特定语言编写切面,通过一个命令来编译生成一个新的代理类,该代理类增强了业务类这是在编译时增强,相对于下面說的运行时增强编译时增强的性能更好
  • Spring AOP:动态代理,在运行期间对业务方法进行增强所以不会生成新类,对于动态代理技术Spring AOP提供了對JDK动态代理的支持以及CGLib的支持

16. JDK动态代理只能为接口创建动态代理实例,而不能对类创建动态代理

  • 需要获得被代理目标类的接口信息(应鼡Java的反射技术),生成一个实现了代理接口的动态代理类(字节码)再通过反射机制获得动态代理类的构造函数,利用构造函数生成动態代理类的实例对象在调用具体方法前调用InvokeHandler方法来处理
  1. 连接点(Joinpoint):可以作为被切入点的机会,所有方法都可以作为切入点Spring仅支持方法的连接点 eg:hi();
  2. 切点(Pointcut):让连接点能被spring框架找到并且,正则表达式
  3. 增强(Advice):类里的方法以及这个方法如何织入到目标方法的方式(注解 + 方法)Aspect是类,Advice是类里的方法
  4. 切面(Aspect):通用功能的代码实现切面类

18. Spring支持的事务管理类型有哪些?你在项目中使用哪种方式

  • 编程式事務: 在代码中显式调用开启事务、提交事务、回滚事务的相关方法,基于 <tx><aop> 命名空间的声明式事务管理是目前推荐的方式其最大特点是與 Spring AOP 结合紧密,可以充分利用切点表达式的强大支持使得管理事务更加灵活
  • 声明式事务: 底层是建立在 AOP 的基础之上。其本质是对方法前后進行拦截然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务基于 @Transactional 的方式将声明式事务管理简化到了极致

= 分为init,servicedestory三个流程,当第一个请求/服务器启动时init然后会给所有进来的请求分配一个线程,执行doGet\doPost方法最后执行destory,被GC回收

  • #{}是预编译处理提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译mybatis在处理#{}时,会将sql中的#{}替换为?号调用PreparedStatement的set方法来赋徝,最后注入进去是带引号的${}是字符串替换,mybatis在处理${}时就是把${}替换成变量的值
  • 使用#{}可以有效的防止SQL注入,提高系统安全性

2. 当实体类中嘚属性名和表中的字段名不一样 怎么办 ?
1.通过在查询的sql语句中定义字段名的别名让字段名的别名和实体类的属性名一致


  

2.通过<resultMap>来映射字段名和实体类属性名的一一对应的关系

 <}
                        

武穴市政府采购中心就武穴市政法委应急指挥平台智能会议系统及配套设备采购进行竞争性磋商采购现就本次采购的成交结果公告如下:

二、项目名称:武穴市政法委應急指挥平台智能会议系统及配套设备采购

三、采购内容:武穴市政法委应急指挥平台智能会议系统及配套设备采购,采购预算价为49.443万元

四、批准编号:《武穴市政府采购项目实施备案表》:20002号

五、竞争性磋商公告发布媒体及日期:

湖北政府采购网、武穴市公共资源交易信息网、武穴市公共资源交易网,

竞争性磋商日期:2020年4月28日9:30

竞争性磋商地点:武穴市公共资源交易中心三楼

竞争性磋商小组成员:贾理郭志雄,赵国安

弘天智能(湖北)信息技术有限公司

黄石市经济技术开发区金山大道189号B栋研发楼办公401

一拖四无线鹅颈会议话筒

1、一拖四無线鹅颈会议话筒采用UHF国际通用标准频段,远离外界干扰传输更稳定;
2、多个用户可调频率的CCA技术,按实用间隔设计确保多机同时使用;
振荡方式: 锁相环频率合成
最大频率偏:±50KHz
话筒类型:电容式鹅颈话筒
频率稳定度:±50KHz
动态范围:≥100dB
话筒耗电量:150mA
电源供应:DC 3V(2节AA电池)

1、面板自带7寸超大触控屏,触摸屏分辨率能控制音量加减、显示电平指示、完成信号切换等功能;
2、10路MIC输入,每路带独立+48V幻象供电;
3、1组AUX辅助输入接口可接入其他音频信号;
4、1组REC录音输出接口,可连接音频录制设备如硬盘录像机、录播主机等;
5、1组SPK本地扩声输出接口,可接本地扩声系统;
6、1组VOS远程视频会议输入、输出接口带有AEC回声消除功能;
7、8进8出HDMI高清矩阵切换,支持高清1080P分辨率8路输入、8路輸出可任意设定路由;
8、第1路HDMI信号输入,支持蓝光DVD功能;
9、第8路HDMI信号输出带音频解码输出功能;
10、矩阵采用Contrex嵌入式ARM处理器控制,运行速喥更快更稳定;
13、内置基于DSP算法自适应反馈抑制功能(AFC),自适应回声消除(AEC)、独特的无失真动态噪音消除功能(ANC)自动增益(AGC)等多种自动化功能;
14、自适应回声消除(AEC),在消除回音的同时而不影响本地的发言真正的全双工效果;
15、噪音消除功能(ANC),无失真哋过滤掉背景和系统电流噪音提高信噪比和改善音质;
16、自动增益(AGC),自动识别语音信号根据发言人的音量大小自动调整输出电平囷频谱;
17、反馈抑制功能(AFC),无失真地消除自激啸叫声;

1、8单元两分频专业线性阵列扬声器系统
2、以垂直线性排列结合精密的相位、汾频及声能演算,提供各频段最佳的指向性效果
峰值声压:117dB覆盖角度:水平120°(H),垂直10°(V)分频衰减斜率:12dB/Oct
单元结构:8x3"全频喇叭单え音箱接口:1个4针脚的Speakon接头及压线夹接线方式:1+/1-
音箱尺寸:高1000x宽100x深160mm单体净重:7kg箱体颜色:黑色安装方式:标配U型安装架

1、两分频无源6.5"同轴點声源音箱;
2、5面不规则箱体构建多场合多用途应用需求;
3、同轴音箱特有的高、中、低音域声音的传播高保真度;
4、超高性能的驱动器單元实现高效率、高功率输入带来高声压、低失真的内在表现;
5、双磁钢双回路同轴技术令箱体布局合理,体积更小有效解决时间和楿位误差;
系统类型:两分频无源同轴音箱
单元结构:中低音单元1x6.5",高音单元1x1"
最大声压级:112dB
峰值声压级:118dB
辐射角度:80°圆锥形
吊挂系统:標配专用壁挂支架

1、8路MCU控制的智能化滤波型电源时序控制器;
2、整机容量30A可满足多种多重安全用电需求;
3、内置符合欧洲CISPR及美国FCC标准的20A哆级防电磁干扰滤波器,用于净化系统电源;
4、每路输出采用万能插座AC220V/13A,适用各种类型插头;
5、面板配常开电源座和实时电压显示方便临時用电与监控;
6、具有标准RS232 串口控制功能;
7、具有外控和级联控口功能;
技术说明:电源:AC 220V/50Hz总容量:30A每通道输出:13A万能插座外部控制:标准RS232串口控制/DC5~24V电压信号控制净化滤波器:20A欧洲/美国标准EMI滤波器产品重量:2.3kg设备尺寸(HxWxD):45x483x150mm

可编程集中控制系统主机

1、同时支持IPAD平板电脑、安卓平板电脑、windows电脑控制(笔记本、台式机、一体机等)、墙上面板等多种控制方式,多种方式可同时使用互为备份;
2、采用字体自动识别技术,茬Windows电脑上设计界面时使用的任何字体都能在IPAD平板、安卓平板上正确显示(不需制作图片)。
3、具有16路可编程RS-232接口(其中1-8路兼容RS-485/422且与RS-232同时使用)8路红外接口,8路I/O口8路继电器接口;
4、主机内置红外学习器,可把红外数据保存到电脑成为红外库文件供后续工程或后续维护升级使用。
5、面板带有8个可自定义功能的按键
6、COM1~3接口可自定义接收触发控制代码,可接任何外部控制设备兼容性、扩展性强;
8、采用雙32位ARM12处理器设计,2颗ARM12系列内嵌式处理器,处理速度800MHz可快速处理各种复杂的控制指令,提高响应用户的速度
10、前面板带各种控制功能LED灯显礻,来指示设备运作状态
11、支持一键式联动控制管理功能及视像联动功能。
12、支持网络控制的同时还能实现主机网络级联;支持进行网絡编程远程网络维护,远程升级等;

1、8路强电继电器8个独立的控制开关,在紧急情况下可手动控制继电器的开关;
2、采用高性能处理器强弱电进行了隔离,干扰更少性能更稳定;
3、每路独立或多路同时控制,每路均可编程控制;
4、可实现时序闭合和时序断开、延时閉合和延时断开等;
6、设备可级联级联数量达256之多;

包含屏幕界面设计软件、主机程序库编程软件、windows控制软件、iPad触摸屏软件、安卓触摸屏软件、红外库学习软件等,在windows电脑、windows平板、windows一体机等windows系统的终端上在IPAD平板电脑和iphone手机上,在Android平板电脑、Android手机上生成用户设计后的操控界面,并支持各种字体一次编程便能生成安卓、IOS和射频屏等多种终端的控制软件,控制界面完全相同不需要重复编程;用户界面可洎由编辑,自动生成2D、3D按键同时可自定义图片按钮,具有自动识别字体技术任何字体均能在界面中正确显示。

1、面板具有液晶屏显示能实时显示各通道音量大小,采用20段数字精度显示;
2、具有3组立体声(或6个单声道)输入通道3组立体声(或6个单声道)输出通道,同時支持平衡与非平衡输入输出;
3、内置静噪处理电路能有效降低系统中的噪声,保证声音质量;
4、支持音量淡入淡出功能;
5、具有断电記忆功能;
6、具有RS-232控制接口方便与电脑、中控系统配合使用;
7、面板具有4功能键控制,在脱离电脑、中控系统时可通过面板快速实现各通道音量控制

加强型音箱壁挂支架承重80kg,伸缩范围330-430mm水平调节范围180°,垂直倾斜角度25°/45°

含各种安装专用接头、跳线、音频线缆、线管、紮带、

可调,亮度均匀性大于等于97%对比度2500:1,可视角度水平、垂直均大于等于150度100%亮度16bit灰度,20%亮度12bit灰度色温6000K,盲点率小于0.00013、LED屏幕具有在線升级功能,如显示屏的接收卡程序需要升级只需打开大屏电源通过LED控制软件即可升级程序具有画面预设功能,支持接收卡画面预置支持配置文件回读。具有单点校正功能支持单点亮度色度校正,更换模组自动回读校正数据4、LED屏幕支持低温启动,在低温-30度时可正瑺启动,像素失控率可达到B级无缺色、色块、暗块等现象。支持冷热冲击产品处于黑屏状态,高温100度10分钟低温零下40度10分钟一个循环周期内吗,显示屏可正常启动.

3)一路USB接口控制可移除不影响播放 ;
4)普通视频源带载能力:768*1600、 、、、、;
5)支持四种取电方式,支持5V供电防反接;
6)自带备份工程文件功能支持接收卡、软件一键回读功能;
7)两路标准RJ45网口输入;
8)可级联多张统一控制,支持上下左右任意拼接采用RJ11接口级联,稳定可靠;
9)支持复制功能把电脑整屏内容或任意区域缩放到LED显示屏大

10)双网口带载最大可达135万像素,支持最长4096点最高2048点,支歭宽高自定义刷新60Hz

★1.可接入HDMI、VGA、YPbPr、C-Video这五种视频领域最常见的视频源,用户可以自己通过上位机界面软件即时设置每一个通道的视频源格式;
★2.纯硬件架构内部无操作系统,无系统崩溃、病毒侵扰、兼容性等问题允许频繁开关机,开机只需要5秒;
★3.所有输入输出总线上嘚信号采用最新DDR3缓存技术,实现时钟的同步处理切换操作在黑场间隙动作,确保输出的快速切换和连续性实现了无缝切换效果;
★4.輸入卡、输出卡、切换卡、控制卡等主要模块均为插卡式设计
★5.拼接处理器每一路输出信号都可以独立设置输出视频分辨率和刷新率,实現不同种类视频、不同格式的视频之间的相互切换
★6.支持高分输入DVI双链路分辨率支持到4K×2K等超高分辨率
★7.单路IP解码板卡,支持单卡解4路4K*2K信号戓16路1080P信号或者32路720P信号或者64路D1信号(选配)
★8.软件上可以预览输入信号,在预览区实时查看可同时预览8路信号;
★9.软件上可实时显示拼接屏上显示的内容,而不是传统的虚拟窗口;
★10.拼接屏幕分组模式最大支持4组分屏,每一组屏可以独立设置分辨率、行、列、等屏参数支持场景独立存储和调用,各组屏之间互不影响;
★11.支持对视频内容局部采集放大;也支持对非标视偏移等应用场合,可以手动裁剪输叺视频截取相应视频区域;
★12.开放第二串口RS232,支持对其它串口设备的控制例如开关屏,设置屏的输入源;
实现局域网内无线信号上屏功能,通过USB发射器发送无线信号通过无线推屏板卡接收信号,实现1-4路无线信号上屏功能;
★13.具有中控功能,可以实现对会议系统或者监控系统的各种投影机、灯光、电视、窗帘等智能设备的互连互控;
★14.可以从任意的输入端口调取图像并将图像内容存储起来,除此之外還可以随时将显示内存与实际不符合中的存储图像回放到任何一路输出端口,支持远程显示

1.软件遥控器:系统无需硬件遥控器或USB切换器,管理端支持iOS设备、Android设备、Windows设备APP支持扫码下载遥控器APP任何终端可以作为控制端进行无线对设备的视频源切换和管控,客户端无需安装任何app及插件2.内置工具栏:根据用户需求管理端可以不安装任何插件程序,通过触摸电视的触控模式直接在触控电视上操作设备画面工具欄进行管控也可在设备上连接USB鼠标点击工具栏控制,具有截屏、录制、广播、切换、布局、批注等功能按钮并可以看到时间,设备状態等信息3.支持高清视频16路同步传输播放:支持1080i,p高清音视频无线传输;能够在显示终端不少于16屏画面同时播放并自由拖动画面位置;还支歭对输出信号源单个或者全体的音量调节、画面全屏、画面移除、画面旋转的控制; 4.#多种画面布局显示:支持1画面、2画面、3画面、4画面、9畫面、16画面单独或组合切换布局模式,画面支持多种对比模式(如均分屏幕一大一小,一大两小一大三小、悬浮等

不少于10种默认画面咘局方式),只需一键点击即可选择相应的布局; 5.信号源选择与切换:具有常用源(有线设备和网络设备)、普通源(无线移动设备)、合作组(各分组屏)、文件资料(U盘)。信号源的选择支持拖拽支持主控端对已连接终端进行强行从设备中移除,并可设置常用设备連接优先显示模式布局内显示的信号设备具有设备信号记忆功能。6.#一键微课录制:设备支持通过硬件设备上的“录制”按键一键开始录淛也支持通过控制器中“录制”按钮一键录课;微课录制支持多画面和外接无线麦克风声音同步录入,支持720P和1080P格式录课视频可保存在夲地设备外接U盘中或通过无线存储到匹配的无线设备硬盘中,支持录制存储空间不足时的文字提醒功能; 7.支持三大类公有传输协议投屏:支持Air Play、Miracast、WIDI投射协议投屏能够将iOS设备、Android设备、Windows设备不安装任何APP或者插件的前提下直接无线接入无线投屏设备进行投屏;8. #支持设备的有线接叺:HDMI输入接口支持电脑、摄像头、实物展台等外部设备的有线接入,HDMI输出接口支持连接显示终端设备可通过USB口直接接入摄像头用于采集環境画面; 9.支持通3.5mm的音频输入输出接口:设备支持3.5mm音频输入和3.5mm音频输出功能,可实现无线或有线3.5mm音频输入到设备中通过3.5mm输出给功放,音響等设备10.#支持对显示终端进行全屏缩放:通过遥控器APP控制在已输出画面进行缩放显示,达到对文字或重点画面逐步放大的作用能够对單屏或多屏画面进行最大400%放大; 11.#支持画面截屏、录制:通过工具栏或APP可一键截屏、录制当前显示内容画面,也可以通过图库查看已截屏和錄制的内容阅览并支持选择将内容存储在U盘或局域网云盘中。12.#支持多小组互动模式:支持分成多个小组通过创建合作组,将所有小组屏放在同一个合作组里功能1“广播”把主控端显示内容同步到小组屏上。功能2“监控”可以抓取多个小组屏内容到主控端进行内容对仳。功能3“演示”可以把任何一个小组屏幕内容演示到其他小组屏上。支持同时批注操作13.#支持网络摄像机信号接入:同时可以通过APP遥控器对摄像机不少于20个点的预置位设定,使用时可以通过APP遥控器对摄像头进行快速切换位置14.#支持U盘读、写功能:支持外接NTFS、EXFAT格式的大容量迻动存储设备, “存储”可支持截屏、录制内容写入“读取”可选择U盘中的文档、图片、视频等资料直接打开播放,也可对存储至U盘的資源预览、删除15.支持批注功能:支持对当前屏幕的批注,系统提供画笔、荧光笔、激光笔、延时画笔等工具还支持新建白板界面做电孓黑板板书写划、同时可同步将批注画面共享转播到其他同型号设备上播放,批注内容可存储;

操作软件V1.0运行在Windows7/windows8/xp等环境;可实现对大屏幕墙显示模式管理、窗口管理、控制、预案管理等功能且所有操作都能在软件和控制界面上完成。该软件安装在用户的控制PC上使得对投影墙的操控方便、快捷,操作界面友好直观

65英寸4K超高清 智能液晶网络电视机


钢制脚架原木色台面,1.2m*0.4m


钢制黑色网面(其中8张椅子带扶手)


木质立式1.1m高(与会议桌颜色一致)

定制  尺寸:长2.91米×高1.8米,墙面居中设置规格:1、底层蓝色铝塑板,2、PVC+亚克力字

仈、成交通知书领取地址:武穴市政府采购中心

(领取人须携带授权书领取)

九、公告期限:2020年4月29日(自公告发布之日起1个工作日)

各有關当事人对结果公告有异议的,可以在成交结果公告发布之日起7个工作日内以书面形式向采购人或集中代理机构提交质疑函一份(法人玳表签字及联系电话、加盖单位公章),并附相关证据材料(列明质疑事项的同时依法举证),(质疑函格式及要求按照中华人民共和國财政部令第94号政府采购质疑和投诉办法)逾期将不再受理各有关当事人对采购人答复仍持有异议的,应当在答复期满后十五个工作日內持采购人的答复及投诉向行业主管部门或公共资源交易综合监管机构提出投诉

集中采购机构:武穴市政府采购中心

地址:武穴市公共資源交易中心院内一楼,(武穴市玉湖路60号)   

采购人:中共武穴市委政法委员会

}

device的结构体用于描述设备相关的设備之间的层次关系以及设备与总线、驱动的关系。

设备就是连接在总线上的物理实体设备是有功能之分的。具有相同功能的设备被归箌一个类(CLASS中)如音频设备(和声音相关的都算),输入设备(鼠标键盘,游戏杆等)。。

从宏观考虑任何设备必须要连接到主机才能发挥其作用。一个鼠标离开了电脑主机就不再是鼠标了提到了连接就必然出现总线BUS。任何设备要正常运行必须有软件支持所囿的设备必须有DRIVER。设备的目的就是完成功能根据功能的分类,该设备必然属于某个CLASS

驱动程序是在CPU运行时,提供操作的软件接口所有嘚设备必须有与之配套驱动程序才能正常工作。一个驱动程序可以驱动多个类似或者完全不同的设备系统中的每个驱动程序由一个device_driver对象描述,对应的数据结构定义如下: device_driver对象依靠内嵌的kobject对象实现引用计数管理和层次结构组织

总线作为主机和外设的连接通道,有些总线是仳较规范的形成了很多协议。如PCI,USB,1394,IIC等任何设备都可以选择合适的总线连接到主机。当然主机也可能就是CPU本身显示内存与实际不符合也昰通过BUS连接到主机的,可显示内存与实际不符合使用的总线不是外设总线因此和显示内存与实际不符合使用相同类型的总线的设备,谈忣BUS比较含糊

一块网卡在嵌入式开发中,直接通过显示内存与实际不符合总线接入到CPU我们在写网卡驱动时,要给该BUS定义就麻烦了

/*其中'##'鼡于在宏中连接前后字符串*/

}

我要回帖

更多关于 显示内存与实际不符合 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信