java面试笔记01

2021-05-01Java面试知识点 本文分为十九个模块,分别是:Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM,如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 Java 基础 1. JDK 和 JRE 有什么区别? J.. 阅读详情

 第一章:Java基础篇

1、谈谈你对java的认识

     这个问题很大,很抽象,要回答好确实不容易。宏观上面来说,从C语言面向过程到C++面向对象到java语言纯面向对象这一发展过程都是为了提高公用性、重用性、可读性,降低耦合性。java程序是对象的集合,是一系列带有方法的对象组合,这些方法以其他对象为参数,并发送消息给其他对象。这样由于java中的对象是由状态、行为和标识组成。状态可以认为是对象存在的具体值;行为可认为是对象所能做的操作;而标识是对象在内存中的唯一地址。通常在程序中只能看到对象的前两个属性。在java中所有的代码都必须写在class里,而每个对象都是某个类(class)的一个实例(instance),也就是说java中的所有操作都是由对象完成的。

   java有许多优良的特性,使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。java的优良特性说明如下:

 1)简单。Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别是,Java语言不使用指针,并提供了自动的垃圾回收机制,使得程序员不必为内存管理而担忧。

 2)面向对象。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

 3)分布式。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

 4)健壮。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证,Java的安全检查机制使得Java更具健壮性。

 5)安全。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。

 6)体系结构中立。Java程序在Java平台上被编译为体系结构中立的字节码格式, 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。 
 7)可移植性。任意一个JAVA程序,不论它运行在何种CPU、操作系统或JAVA编译器上,都将产生同样的结果。人们使用C、C++也可以产生同样的效果。但C或C++在许多细节上它都没有严格定义,如:未初始化变量的值、对已释放的内存的存取、浮点运算的尾数值等等。所以除非你一开始就严格按照系统无关的概念来进行设计,否则这种可移植性只能是一种理论上的设想而不能形成实践。而JAVA定义了严密的语意结构,它的特性能够减小在不同平台上运行的JAVA程序之间的差异,也使得JAVA具有即使没有JAVA虚拟机的存在的情况下比C和C++更好的平台无关性。
 8)解释型。Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
 9)高性能。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。 
  10)多态。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

   注:在回答这个问题时,应该先从宏观方面说出java面向对象的特点,然后从java特性展开说明。其中1)、2)、3)、4)、5)能说出来最好,其他几点相对来说无关紧要。

2、抽象类与接口

   抽象类:抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象。在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为这个抽象类的所有派生类。

   接口:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

     区别:1)从设计理念层面上:abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a"关系,即父类和派生类在概念本质上应该是相同的。对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已,接口与实现类 之间的关系是"like-a"的关系。(举例:class AlarmDoor extends Door implements Alarm);2)从语法定义层面上:在abstract class方式中,抽象类可以有自己的数据成员,也可以有非 abstract的成员方法,而在interface方式的实现中,只能有有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的 abstract class。abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑。在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为。

3、overload和override的区别 

    overload是重载,是同一个类中有相同的方法名,但参数类型或个数彼此不同。1)参数类型、个数、顺序至少有一个不相同。2)不能重载只有返回值不同的方法名。3)存在于父类和子类、同类中。

      override是重写,是在子类与父类中,子类中的方法的方法名,参数个数、类型都与父类中的完全一样,在子类中覆盖掉了父类的改方法 。1)方法名、参数、返回值相同。2)子类方法不能缩小父类方法的访问权限。3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。4)存在于父类和子类之间。5)方法被定义为final不能被重写。

4、String与StringBuffer的区别 

     JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。另外,String实现了equals方法,new String(“abc”).equals(new String(“abc”)的结果为true,而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的结果为false。 
接着要举一个具体的例子来说明,我们要把1到100的所有数字拼起来,组成一个串。

[java]  view plain copy
  1. StringBuffer sbf = new StringBuffer();   
  2. for(int i=0;i<100;i++)  
  3. {  
  4.        sbf.append(i);  
  5. }  
上面的代码效率很高,因为 只创建了一个StringBuffer对象,而下面的代码效率很低,因为创建了101个对象 。
[java]  view plain copy
  1. String str = new String();   
  2. for(int i=0;i<100;i++)  
  3. {  
  4.        str = str + i;  
  5. }  
String覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题。  

5、java集合框架结构(Map,List,Set......)

1)类结构图

简化图


详细图


2)ArrayList,Vector容量相关问题

ArrayList:如果以new ArrayList()方式创建时,初始容量为10个;如果以new ArrayList(Collection c)初始化时,容量为c.size()*1.1,即增加10%的容量;当向ArrayList中添加一个元素时,先进行容器的容量调整,如果容量不够时,则增加至原来的1.5倍加1,再然后把元素加入到容器中,即以原始容量的0.5倍比率增加。

Vector:初始化时容量可以设定,如果以new Vector()方式创建时,则初始容量为10,超过容量时以2倍容量增加。如果以new Vector(Collection c)方式创建时,初始容量为c.size()*1.1,超过时以2倍容量增加。如果以new Vector(int initialCapacity, int capacityIncrement),则以capacityIncrement容量增加。

3)集合特点 

  • List:保证以某种特定插入顺序来维护元素顺序,即保持插入的顺序,另外元素可以重复。
  • ArrayList:是用数组实现的,读取速度快,插入与删除速度慢(因为插入与删除时要移动后面的元素),适合于随机访问。
  • Vector:功能与ArrayList几乎相同,也是以数组实现,添加,删除,读取,设置都是基于线程同步的。
  • LinkedList:双向链表来实现,删除与插入速度快,读取速度较慢,因为它读取时是从头向尾(如果节点在链的前半部分),或尾向头(如果节点在链的后半部分)查找元素。因此适合于元素的插入与删除操作。
  • Set:维持它自己的内部排序,随机访问不具有意义。另外元素不可重复。
  • HashSet:是最常用的,查询速度最快,因为 内部以HashMap来实现,所以插入元素不能保持插入次序。
  • LinkedHashSet:继承了HashSet,保持元素的插入次序,因为内部使用LinkedHashMap实现,所以能保持元素插入次序。
  • TreeSet:基于TreeMap,生成一个总是处于排序状态的set,它实现了SortedSet接口,内部以 TreeMap来实现
  • TreeMap:键以某种排序规则排序,内部以red-black(红-黑)树数据结构实现,实现了SortedMap接口,具体可参《RED-BLACK(红黑)树的实现TreeMap源码阅读 》
  • HashMap: 以哈希表数据结构实现,查找对象时通过哈希函数计算其位置,它是为快速查询而设计的,其内部定义了一个hash表数组(Entry[] table),元素会通过哈希转换函数将元素的哈希地址转换成数组中存放的索引,如果有冲突,则使用散列链表的形式将所有相同哈希地址的元素串起来,可能通过查看HashMap.Entry的源码它是一个单链表结构。
  • Hashtable:也是以哈希表数据结构实现的,解决冲突时与HashMap也一样也是采用了散列链表的形式,不过性能比HashMap要低。
  • LinkedHashMap:继承HashMap,内部实体LinkedHashMap.Entry继承自HashMap.Entry,LinkedHashMap.Entry在HashMap.Entry的基础上新增了两个实体引用(Entry before, after),这样实体可以相互串链起来形成链,并且在LinkedHashMap中就定义了一个头节点(Entry header)用来指向循环双向链的第一个元素(通过after指向)与最后一个元素(通过before指向)。在添加一个元素时,先会通过父类HashMap将元素加入到hash表数组里,然后再会在链尾(header.before指向位置)添加(当然这一过程只是调整LinkedHashMap.Entry对象内部的before, after而已,而不是真真创建一个什么新的链表结构向里加那样);删除先从hash表数组中删除,再将被删除的元素彻底的从双向链中断开。其实在链中添加与删除操作与LinkedList是一样的,可以参考《Java集合框架之LinkedList及ListIterator实现源码分析 》 

4)HashMap与HashTable的区别 

  • Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程应用程序中,我们应该使用Hashtable;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:Map Collections.synchronizedMap(Map m),当然与可以自己在使用地方加锁。
  • 在HashMap中,可以允许null作为键,且只可以有一个,否则覆盖,但可以有一个或多个值为null。因为当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null,所以HashMap不能由get()方法来判断否存在某个键,而应该用containsKey()方法来判断;而Hashtable不允许null键与null值。
  • HashTable使用Enumeration,HashMap使用Iterator。
  • Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
  • HashTable中hash table数组默认大小是11,增加的方式是 int newCapacity = oldCapacity * 2 + 1;,即增加至2倍(而不是2倍加1,因为扩容是在增加元素前进行的,在扩容后会将新增元素放入容器中)。HashMap中hash数组的默认大小是16,而且一定是2的多少次方;另外两者的默认负载因子都是0.75。
  • 求哈希地址与哈希地址转hash数组(Entry table[])索引方法不同:
  • HashTable直接使用对象的hashCode:
    [java]  view plain copy
    1. int hash = key.hashCode();//直接使用键的hashCode方法求哈希值    
    2. //哈希地址转hash数组索引,先使用最大正int数与,这样将负转正数,再与数组长度求模得到存入的hash数组索引位置    
    3. int index = (hash & 0x7FFFFFFF) % tab.length;    
    而HashMap重新计算hash值,而且用位运算&代替求模:
    [java]  view plain copy
    1. int hash = hash(k);    
    2. int i = indexFor(hash, table.length);    
    3.     
    4. static int hash(Object x) {    
    5. //以键本身的hash码为基础求哈希地址,但看不懂是什么意思    
    6.   int h = x.hashCode();    
    7.   h += ~(h << 9);    
    8.   h ^= (h >>> 14);    
    9.   h += (h << 4);    
    10.   h ^= (h >>> 10);    
    11.   return h;    
    12. }    
    13. static int indexFor(int h, int length) {    
    14.   return h & (length-1);//将哈希地址转换成哈希数组中存入的索引号    
    15. }    
    HashMap实现图:

5) 集合中键值是否允许null小结

  • List:可以有多个null,可以有重复值
  • HashSet:能插入一个null(因为内部是以 HashMap实现 ),忽略不插入重复元素。
  • TreeSet:不能插入null (因为内部是以 TreeMap 实现 ) ,元素不能重复,如果待插入的元素存在,则忽略不插入,对元素进行排序。
  • HashMap:允许一个null键与多个null值,若重复键,则覆盖以前值。
  • TreeMap:不允许null键(实际上可以插入一个null键,如果这个Map里只有一个元素是不会报错的,因为一个元素时没有进行排序操作,也就不会报空指针异常,但如果插入第二个时就会立即报错),但允许多个null值,覆盖已有键值。
  • HashTable:不允许null键与null值(否则运行进报空指针异常)。也会覆盖以重复值。基于线程同步。

6) 对List的选择

  • 对于随机查询与迭代遍历操作,数组比所有的容器都要快。
  • 从中间的位置插入和删除元素,LinkedList要比ArrayList快,特别是删除操作。
  • Vector通常不如ArrayList快,则且应该避免使用,它目前仍然存在于类库中的原因是为了支持过去的代码。
  • 最佳实践:将ArrayList作为默认首选,只有当程序的性能因为经常从list中间进行插入和删除而变差的时候,才去选择LinkedList。当然了,如果只是使用固定数量的元素,就应该选择数组了。

7) 对Set的选择

  • HashSet的性能总比TreeSet好(特别是最常用的添加和查找元素操作)。
  • TreeSet存在的唯一原因是,它可以维持元素的排序状态,所以只有当你需要一个排好序的Set时,才应该使用TreeSet。
  • 对于插入操作,LinkedHashSet比HashSet略微慢一点:这是由于维护链表所带来额外开销造成的。不过,因为有了链表,遍历LinkedHashSet会比HashSet更快。

8) 对Map的选择

  • Hashtable和HashMap的效率大致相同(通常HashMap更快一点,所以HashMap有意取代Hashtable)。
  • TreeMap通常比HashMap慢,因为要维护排序。
  • HashMap正是为快速查询而设计的。
  • LinkedHashMap比HashMap慢一点,因为它维护散列数据结构的同时还要维护链表。

9) Stack,Vector:Stack基于线程安全,Stack类是用Vector来实现的(public class Stack extends Vector),但最好不要用集合API里的这个实现栈,因为它继承于Vector,本就是一个错误的设计,应该是一个组合的设计关系。

10) Iterator对ArrayList(LinkedList)的操作限制:

  • 刚实例化的迭代器如果还没有进行后移(next)操作是不能马上进行删除与修改操作的。。
  • 可以用ListIterator对集合连续添加与修改,但不能连续删除。。
  • 进行添加操作后是不能立即进行删除与修改操作的。。
  • 进行删除操作后可以进行添加,但不能进行修改操作。
  • 进行修改后是可以立即进行删除与添加操作的。

11) hashCode(),equals()方法:当以自己的对象做为HashMap、HashTable、LinkedHashMap、HashSet 、LinkedHashSet 的键时,一定要重写hashCode ()与equals ()方法,因为Object的hashCode()是返回内存地址,且equals()方法也是比较内存地址,所以当要在这些hash集合中查找时,如果是另外new出的新对象是查不到的,除非重写这两个方法。因为AbstractMap类的containsKey(Object key)方法实现如下:

[java]  view plain copy
  1. if (e.hash == hash && eq(k, e.key))//先比对hashcode,再使用equals    
  2.     return true;      
  3. static boolean eq(Object x, Object y) {    
  4.     return x == y || x.equals(y);    
  5. }    
String对象是可以准确做为键的,因为已重写了这两个方法。因此,Java中的集合框架中的哈希是以一个对象查找另外一个对象,所以重写hasCode与equals方法很重要。 重写hashCode()与equals()这两个方法是针对哈希类,至于其它集合,如果要用public boolean contains(Object o)或containsValue(Object value)查找时,只需要实现equals()方法即可,他们都只使用对象的 equals方法进行比对,没有使用 hashCode方法。

12) TreeMap,TreeSet:放入其中的元素一定要具有自然比较能力(即要实现java.lang.Comparable接口)或者在构造TreeMap/TreeSet时传入一个比较器(实现java.util.Comparator接口),如果在创建时没有传入比较器,而放入的元素也没有自然比较能力时,会出现类型转换错误(因为在没有较器时,会试着转成Comparable型)。

[java]  view plain copy
  1. //自然比较器    
  2. public interface java.lang.Comparable {    
  3.     public int compareTo(Object o);    
  4. }      
  5. public interface java.util.Comparator {    
  6.     int compare(Object o1, Object o2);    
  7.     boolean equals(Object obj);    
  8. }    
13) TreeMap,TreeSet: Collection或Map的同步控制:可以使用Collections类的相应静态方法来包装相应的集合类,使他们具线程安全,如public static Collection synchronizedCollection (Collection c)方法实质返回的是包装后的SynchronizedCollection子类,当然你也可以使用Collections的synchronizedList、synchronizedMap、synchronizedSet方法来获取不同的经过包装了的同步集合,其代码片断:
[java]  view plain copy
  1. public class Collections {    
  2.       static Collection synchronizedCollection(Collection c, Object mutex) {    
  3.         return new SynchronizedCollection(c, mutex);    
  4.     }      
  5.     public static List synchronizedList(List list) {    
  6.          
  7.     }      
  8.     static Set synchronizedSet(Set s, Object mutex) {    
  9.          
  10.     }      
  11.     public static Map synchronizedMap(Map m) {    
  12.         return new SynchronizedMap(m);    
  13.     }     
  14.     static class SynchronizedCollection implements Collection, Serializable {      
  15.         Collection c; // 对哪个集合进行同步(包装)    
  16.         Object mutex; // 对象锁,可以自己设置             
  17.         SynchronizedCollection(Collection c, Object mutex) {    
  18.             this.c = c;    
  19.             this.mutex = mutex;    
  20.         }      
  21.         public int size() {    
  22.             synchronized (mutex) {    
  23.                 return c.size();    
  24.             }    
  25.         }      
  26.         public boolean isEmpty() {    
  27.             synchronized (mutex) {    
  28.                 return c.isEmpty();    
  29.             }    
  30.         }           
  31.     }    
  32.     
  33.     static class SynchronizedList extends SynchronizedCollection implements List {      
  34.         List list;     
  35.         SynchronizedList(List list, Object mutex) {    
  36.             super(list, mutex);    
  37.             this.list = list;    
  38.         }      
  39.         public Object get(int index) {    
  40.             synchronized (mutex) {    
  41.                 return list.get(index);    
  42.             }    
  43.         }         
  44.     }      
  45.     static class SynchronizedSet extends SynchronizedCollection implements Set {    
  46.         SynchronizedSet(Set s) {    
  47.             super(s);    
  48.         }    
  49.     }       
  50. }    
由包装的代码可以看出只是把原集合的相应方法放在同步块里调用罢了。

14) 通过迭代器修改集合结构:通过迭代器修改集合结构在使用迭代器遍历集合时,我们不能通过集合本身来修改集合的结构(添加、删除),只能通过迭代器来操作,下面是拿对HashMap删除操作的测试,其它集合也是这样:

[java]  view plain copy
  1. public static void main(String[] args) {    
  2.  Map map = new HashMap();    
  3.  map.put(1, 1);    
  4.  map.put(2, 3);    
  5.  Set entrySet = map.entrySet();    
  6.  Iterator it = entrySet.iterator();    
  7.  while (it.hasNext()) {    
  8.   Entry entry = (Entry) it.next();    
  9.   /*  
  10.    * 可以通过迭代器来修改集合结构,但前提是要在已执行过 next 或  
  11.    * 前移操作,否则会抛异常:IllegalStateException  
  12.    */    
  13.   // it.remove();    
  14.   /*  
  15.    * 抛异常:ConcurrentModificationException 因为通过 迭代 器操  
  16.    * 作时,不能使用集合本身来修  
  17.    * 改集合的结构  
  18.    */    
  19.   // map.remove(entry.getKey());    
  20.  }    
  21.  System.out.println(map);    
  22. } 
Java面试资料集合,跨越速运java面试经历 这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,基本上涵盖了计算机所有基础知识,从 CPU 到内存、讲解什么是二进制、磁盘、压缩算法、操作系统、汇编等知识。(img-SrSnVEkt-1711046935951)]这个图画的很漂亮啊,看起来就是作者在用心画的,而且排版非常精美。根据读者阅读偏好不同,共出了两个版本风格的 PDF,分别是。看完能让你对计算机有一个基础的了解和入门,是培养你。 阅读详情

相关推荐

4月Java面试,吃透这些Spring面试解析+笔记+视频,随便吊打面试官

*面试常问的内容大致上有:**IOC、AOP、AOP原理动态代理和cglib原理与二者之间的区别、Bean 生命周期、ThreadLocal 保证线程安全、事务传播、Spring MVC、设计模式,除了这些面试题经常出现的,还有就是需要看一些Spring源码解读,因为一些面试官会问你,有没有看过源码,这时候把自己看过的看懂的说一下就OK了。在 Spring AOP 中,关注点和横切关注的区别是什么?请介绍你熟悉的 Spring 核心类,并说明有什么作用?Spring 的通知类型有哪些,请简单介绍一下?

2501_90237401的博客 949

Java面试总结笔记

JDK1.8相较于之前的变化://默认情况下,先不创建长度为16的数组2.当首次调用map.put()时,再创建长度为16的数组3.数组为Node类型,在jdk7中称为Entry类型4.形成链表结构时,新添加的key-value对在链表的尾部(七上八下)5.当数组指定索引位置的链表长度>8时,且map中的数组的长度> 64时,此索引位置 上的所有key-value对使用红黑树进行存储HashMap源码中的重要常量。

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 1583

如何实现三种不同RAM?(单端口RAM、伪双端口RAM、真双端口RAM|verilog代码|Testbench|仿真结果)

RAM(随机存取存储器)是计算机系统中的一种主要存储器件,用于存储和读取数据。在RAM中,单端口RAM(Single-port RAM)和双端口RAM(Dual-port RAM)是两种常见的类型,双端口RAM又分为真双端口(True dual-port RAM)和伪双端口RAM(Simple dual-port RAM)。那么什么是单端口和双端口?又该如何区分真双端口和伪双端口?输入只有一组数据线和一组地址线,读写共用地址线,输出只有一个端口。

Loudrs的博客 1万+

Java面试笔记

1.类 2.属性 3.方法 4.静态代码块。

chen的博客 1174

UE5.6使用ndisplay,单窗口多画面(单机部署),配置、打包流程,无需switchboard

摘要:本文介绍了在UE5.6中使用ndisplay插件的完整流程。首先需要开启ndisplay和launch插件,创建ndisplay配置文件并设置本地单窗口多画面模式。随后通过Process Explorer获取启动命令用于制作bat文件。打包项目时需删除场景中的ndisplay文件,但保留内容浏览器中的配置,并设置为开发版打包。最后将ndisplay文件导出为.ndisplay格式,与bat文件一起放置在打包目录下,通过bat启动程序。注意修改路径和窗口大小时需保持纯英文路径,且bat代码需保持单行格式

weixin_43912248的博客 977

《计算机网络》复试问答题总结

DNS 是一个联机分布式数据库系统,负责主机名和 IP 地址之间的转换,需要进行域名查询的机器主动发起域名解析请求,域名服务器则随时准备做出响应。域名服务器的数据库中存放着它所管辖范围的主机名和 IP 地址之间的映射表,域名服务器之间又可以相互联络和协作,以便分布在 Internet 各个域名服务器数据库中的域名都能被有效地搜索,从而实现主机名与 IP 地址的映射。为了提高解析效率,使用了域名缓存技术。在服务器、主机中设置一个专用的内存缓冲区。服务器用来存放近期解析过的域名及其对应的 IP 地址的映射。

weixin_45971154的博客 2029

Java面试总结篇

​ 线程安全: 指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现意外结果。​ 线程不安全: 是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据序列化的定义**序列化:**把对象转化为可传输的字节序列过程称为序列化。**反序列化:**把字节序列还原为对象的过程称为反序列化。列化最终的目的是为了对象可以跨平台存储,和进行网络传输。

Know Destiny的博客 1071

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

9794

Java经典面试题笔记

笔记

weixin_51474578的博客 1303

Codex 实战 Skills:用 Skill 自动识别并提取 PDF/图片表格数据,效率提升 10 倍

本文介绍如何构建一个多模态文件解析 Skill,用于自动识别和提取 PDF/图片中的表格数据,提升 AI 智能体处理非结构化文档的效率。文章分析了传统方法的局限性,提出分层解析架构(预处理、检测、提取推理、后处理),推荐技术栈包括 pdfplumber、OpenCV 和多模态大模型。详细说明了 Skill 的元数据定义、数据模型设计(使用 Pydantic)和核心实现流程,通过混合策略实现从复杂文档到结构化 JSON/Markdown 的转换,使 AI 代理具备"阅读"多模态文档的能力。

yueyeguzhuo的专栏 306

【项目实战】使用Python - Mediapipe、OpenCV进行手部面部检测(Python源码)

本文介绍了使用MediaPipe和OpenCV库进行实时面部和手部关键点检测的方法。通过MediaPipe的Holistic模型,可以获取468个面部特征点及每只手21个特征点。文章详细说明了环境配置、模型初始化参数设置,并提供了完整的代码实现,包括视频流处理、关键点绘制和FPS计算等功能。这套方案可应用于手语识别、疲劳检测等计算机视觉场景,为开发者提供了一套高效的开箱即用解决方案。

梦想起飞的地方 481

Java面试问题整理笔记-Java基础知识

Java面试问题整理笔记-Java基础知识

qq_45498432的博客 777

4、基于球面波展开的近场/远场变换技术解析

本文深入解析了基于球面波展开的近场/远场变换技术,涵盖坐标系统选择、截断测量处理、高级SWE方法及实际应用场景。重点介绍了广义SWE、全探头补偿、平移SNF测量(TSWE)等关键技术,结合吸收材料与导电地板系统的误差处理方案,系统总结了各类方法的优缺点与适用场景,并通过流程图和案例分析展示了技术应用路径。该技术在汽车、通信和航空航天领域的天线测量中具有重要价值,可显著提升测量效率与精度。

dell8的博客 255

java面试笔记-01-集合面试题-介绍

其实呢,你通过名字啊,就能分析出,集合底层使用的是哪一种数据结构,如果说你能够知道这些数据结构的特点的话呢。其实呢,你通过这些数据结构呢,就能够反推出当前某个集合的特点。 所以说啊,为了能够让大家更方便的去理解这个集合,我们在讲解集合之前呢。会先给大家去讲解一下集合所对应的,这些数据结构。

鲁迷那的专栏—坚持实践后再写出来! 624

PDF格式分析(一)简介

概述 PDF文件是一种编程形式的文档格式,它所有显示的内容,都是通过相应的操作符进行绘制的。 PDF基本显示单元包括:文字,图片,矢量图,图片 PDF扩展单元包括:水印,电子署名,注释,表单,多媒体,3D PDF动作单元:书签,超链接(初学者可以简单这么理解,对于研究比较深入的人员来说,拥有动作的单元有很多个,包括电子署名,多媒体,3D等等) 优势 一致性: 在所有可以打开PDF的机...

steve_cui的博客 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java面试 基础复习笔记01

1 java 的内存分配 栈内存和堆内存 - 目前我们只需要记住两个内存,分别是:栈内存和堆内存 | 区域名称 | 作用 | 寄存器 | 给CPU使用,和我们开发无关。 | 本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 ...

weixin_44653983的博客 191

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Java】力扣 - 刷题笔记 - 面试题 16.01

【Java】力扣 - 刷题笔记 - 1281【Java】力扣 - 刷题笔记 - 1281题目介绍解题思路 【Java】力扣 - 刷题笔记 - 1281 每日一道题,提升一点点 题目介绍 面试题 16.01. 交换数字 编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。 示例: 输入: numbers = [1,2] 输出: [2,1] 提示: numbers.length == 2 解题思路 1.题目分析 已知数组长度为2,我们可以直接用数学的方法做数据交换 n[

李晋江的博客 1419

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

2024年Java最全【Spring Boot学习笔记01】Spring Boot入门介绍,java面试宝典pdf

Spring Boot是用来简化Spring应用开发的一个框架基于Spring+SpringMVC+Mybatis的应用开发还存在多配置,低效率,部署复杂,第三方技术集成难度大等问题SpringBoot提供了一个J2EE的一站式解决方案,让开发从Spring全家桶时代迈向Spring Boot时代。

2401_84006757的博客 1098

【Spring Boot学习笔记01】Spring Boot入门介绍,2024年最新java面试八股文都是什么

Spring Boot是用来简化Spring应用开发的一个框架基于Spring+SpringMVC+Mybatis的应用开发还存在多配置,低效率,部署复杂,第三方技术集成难度大等问题SpringBoot提供了一个J2EE的一站式解决方案,让开发从Spring全家桶时代迈向Spring Boot时代这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家。

2401_84433829的博客 469

【Spring Boot学习笔记01】Spring Boot入门介绍(1),2024年最新java中级工程师面试

Spring Boot是用来简化Spring应用开发的一个框架基于Spring+SpringMVC+Mybatis的应用开发还存在多配置,低效率,部署复杂,第三方技术集成难度大等问题SpringBoot提供了一个J2EE的一站式解决方案,让开发从Spring全家桶时代迈向Spring Boot时代。

2401_84433807的博客 410

2024年Java最全LeetCode动态规划完全背包问题——139(1),你不知道这份超详细JVM内存结构

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!成功只会留给那些有准备的人!本文已被。

2401_84584740的博客 812

【JAVA面试指导】01—如何准备面试

JAVA面试准备指南 面试需重点准备常见技术问题(如ArrayList/HashMap原理、排序算法、设计模式、Spring核心机制等)及个人简历中的技术栈,深入理解优缺点、使用场景及解决方案。注意避免“精通”等夸大表述,突出实际掌握能力。技术列表应精简且有亮点,避免标准化培训痕迹。 项目经验是考察重点,需准备真实项目细节,包括技术难点、优化方案及实际应用场景,体现解决问题的能力。加分项包括高并发/分布式经验、性能调优、开源贡献或个人技术博客等。面试中要展现独立思考能力、沟通技巧及积极解决问题的态度。 (摘

Keep Reading Keep Writing Keep Thinking 576

【Java八股文】01-Java基础面试篇

【Java八股文】01-Java基础面试篇

bblb的博客 1645

java常见面试01

当两个对象通过equals()判断为相等时,它们的hashCode()必须返回相同的整数值!这是Java世界的交通规则哦~(交警曼波敬礼.jpg)

Eugene__Chen的博客 1410

我的 Java 面试“打怪升级”之路01

在当今的科技行业,Java 作为一门广泛应用的编程语言,其相关的岗位竞争可谓十分激烈。作为一名求职者,经历 Java 面试就如同一场充满挑战的“打怪升级”游戏。在这里,我想和大家分享一下我在 Java 面试中的一些经历和感悟。

布说在见的博客 1454

【java技术面试第一讲】Java面试题01.面试的整体流程

Java面试题01【建议在流量充足或者WiFi环境下观看】好啦!今天的文章就给看官们分享到这儿如果觉得有帮助,记得关注、转发、收藏哟~ 最近小编准备以连载的形式为大家分享一系列...

hello world! 415
上一篇: jdbc连接数据库使用sid和service_name的区别
下一篇: java面试笔记02
牧梦
博客等级 码龄14年 19粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值