精华内容
下载资源
问答
  • c++常见容器操作

    千次阅读 2016-05-29 18:23:36
    总结下常见c++容器操作。   1.Vector、 list和 deque Vector是数组,List 是双端链表,deque时双向队列。分别引入vector/list/deque库。 vector、deque支持随机访问和迭代器偏移,list、deque支持双向访问,...

    总结下常见c++容器操作。

     

    1.Vector、 list和 deque

    Vector是数组,List 是双端链表,deque时双向队列。分别引入vector/list/deque库。

    vector、deque支持随机访问和迭代器偏移,list、deque支持双向访问,list只能自加自减。

    push_back、insert

    push_front 【vector不可用】

    resize 【list不可用】

    pop_back、erase

    pop_front 【vector不可用】

    resize 【list不可用】

    下标、迭代器 【list不可用下标】

    front、back 【vector不可用front】

     

    演示如下:

     

    //Vector -- 数组
    //List -- 双端链表 多了些自己的merge、split、find操作
    //deque --双向队列
    void VectorAndListShow()
    {
    	cout << "=============vector" << endl;
    	vector<int> v;
    
    	//push_back-增加
    	v.push_back(12);
    	v.push_back(13);
    	v.push_back(14);
    	v.insert(v.begin(), 15);
    
    	//下标方式遍历
    	for (int i=0; i<v.size(); i++)
    	{
    		cout << v[i] << " " << endl;
    	}
    
    	//迭代器方式遍历
    	for (vector<int>::iterator iter= v.begin(); iter!=v.end(); iter++)
    	{
    		cout << *iter << " " << endl;
    	}
    
    	//erase-删除,注意更新迭代器
    	vector<int>::iterator iter = v.begin();
    	iter = v.erase(iter);//删除后迭代器返回的是下一个元素,此时要更新迭代器
    	cout << "first value after delete:" << *iter <<endl;
    
    	//pop_back-删除
    	v.pop_back();
    
    	//reserve/resize-容量
    	v.reserve(50);
    	cout << "Capacity" << v.capacity() << endl;		//Capacity 总分配空间大小
    	cout << "Size" << v.size() << endl;				//size 程序已经占用的空间大小
    	v.resize(10);
    	cout << "Capacity" << v.capacity() << endl;
    	cout << "Size" << v.size() << endl;
    
    	cout << "=============list" << endl;
    	list<int> l;
    
    	//push_front/push_back-前增
    	l.push_front(10);
    	l.push_front(12);
    	l.push_front(13);
    	l.push_front(14);
    
    	for (list<int>::iterator iter=l.begin(); iter != l.end(); iter++)//只能用!=,不能用<
    	{
    		cout << *iter << "-";
    	}
    	cout << endl;
    
    	//front/back-访问首尾
    	cout << l.front() << endl;
    }

     

     

     

    2.stack、 queue、 priority_queue

     

    这三种容器都是前面叙述的容器的包装容器,stack、queue默认使用deque实现,priority_queue默认使用vector实现,分别引入stack和queue库。可以更换默认的包装容器。

    【a】.stack-后进(push)先出(pop) 

    支持push/pop/top/empty

    如下,使用list容器来实现stack

     

    	//stack-后进(push)先出(pop)
    	stack<int, list<int> > s;//注意里面的<>和外面的<>分离
    	s.push(1);
    	s.push(2);
    	s.push(3);
    	s.push(4);
    	s.push(5);
    
    	while(!s.empty())
    	{
    		int si = s.top();
    		s.pop();
    		cout << si << " " << endl;
    	}

     

     

     

    【b】.queue-先进(push)先出(pop)

    支持push/pop/front/top/empty

    如下

     

    	//queue-先进(push)先出(pop)
    	queue<int> q;
    	q.push(1);
    	q.push(2);
    	q.push(3);
    	q.push(4);
    	q.push(5);
    
    	while(!q.empty())
    	{
    		int si = q.front();//或back
    		q.pop();
    		cout << si << " " << endl;
    	}


    【c】.priority_queue-支持优先级的队列,可以自定义优先级

     

    支持push/pop/top/empty

    如下,实现数字越小则优先级越高,越先输出的队列

     

    	priority_queue<int, vector<int>, less<int>>  pq;
    	pq.push(18);
    	pq.push(22);
    	pq.push(31);
    	pq.push(48);
    	pq.push(52);
    
    	while(!pq.empty())
    	{
    		int si = pq.top();//不能用front和back
    		pq.pop();
    		cout << si << " " << endl;
    	}

     

     

     

    3.map、 set、 multimap 和multiset

     

    本质上map和set都是hash实现,可以实现复杂度为O(1)的查找和插入复杂度,分别引入map和set库。

    【a】.map和set基本操作

    支持 insert/erase/count/find

    演示如下:

     

    	map<int, string> m;
    
    	//[]下标操作,没有的会新建
    	for (int i=0; i<4; i++)
    	{
    		m[i] = string("12345");
    	}
    
    	//直接插入,make_pair需要引入ulity库
    	m.insert(make_pair(11, "11"));
    	m.insert(make_pair(12, "12"));
    	m.insert(make_pair(13, "13"));
    	m.insert(make_pair(14, "14"));
    
    	//遍历输出
    	for (map<int,string>::iterator iter=m.begin(); iter!=m.end(); iter++)
    	{
    		cout << iter->first << "->" << iter->second.c_str() << endl;
    	}
    
    	//删除
    	int nCnt = m.erase(11);//删除键值为11的,返回值为本次删除的元素个数,一定是1
    	cout << nCnt << endl;
    
    	map<int,string>::iterator delEnd = m.begin();
    	delEnd++;//delEnd不能加,只能自增
    	m.erase(m.begin(), delEnd);//只删除,不返回值
    
    	//查找
    	int n = m.count(13);//对应值的个数,0或1
    	cout << "The count of 13 is:" << n << endl;
    	map<int,string>::const_iterator iter = m.find(13);//返回对应元素的迭代器
    	cout << iter->first << "find is" << iter->second.c_str() << endl;
    
    	//set 和map类似,用于记录单一数据,快速查询
    	set<int> s;
    	s.insert(1);
    	s.insert(2);
    	s.insert(3);
    	s.insert(4);
    
    	cout << s.count(5) <<  endl;

     

     

    【b】.multimap和multiset
    对于multimap和multiset,可存在多个相同的key

    相同的key在存储上位置一定是连续的,因此才有如下3种访问指定key元素的方法:

     

    	//指定值的全部元素 find+count
    	multimap<int,int>::iterator iterFind = mm.find(3);
    	for (int i=0; i<mm.count(3); i++, iterFind++)
    	{
    		cout << iterFind->first << "==>>" << iterFind->second << endl;
    	}
    
    	//指定值的全部元素 lower_bound和upper_bound
    	multimap<int,int>::iterator iterBegin	= mm.lower_bound(3);
    	multimap<int,int>::iterator iterEnd		= mm.upper_bound(3);
    	while (iterBegin!=iterEnd)
    	{
    		cout << iterBegin->first << " ==>> " << iterBegin->second << endl;
    		iterBegin++;
    	}
    
    	//指定值的全部元素  equal_range
    	pair<multimap<int,int>::iterator,multimap<int,int>::iterator> iterPos = mm.equal_range(3);
    	while (iterPos.first!=iterPos.second)
    	{
    		cout << iterPos.first->first << " ==>> " << iterPos.first->second << endl;
    		iterPos.first++;
    	}

     

     

     

     

     

     

    本文完整演示代码下载链接

    原创,转载请注明来自http://blog.csdn.net/wenzhou1219

     

    展开全文
  • Java容器常见面试题

    千次阅读 多人点赞 2019-04-16 16:21:03
    1. Java 容器哪些? Java 容器分为 Collection 和 Map 两大类,其下又很多子类,如下所示是Collection和Map的继承体系: 具体如下结构: Collection List ArrayList LinkedList Vector Stack Set ...

    1. Java 容器都有哪些?

    • Java 容器分为 Collection 和 Map 两大类,其下又有很多子类,如下所示是Collection和Map的继承体系:
      在这里插入图片描述
      在这里插入图片描述
    1. 具体如下结构:
    • Collection
      • List
        • ArrayList
        • LinkedList
        • Vector
        • Stack
      • Set
        • HashSet
        • LinkedHashSet
        • TreeSet
    • Map
      • HashMap
        • LinkedHashMap
      • TreeMap
      • ConcurrentHashMap
      • Hashtable

    2. ArrayList和LinkList的区别?

    1. ArrayList(数组结构)
      1. 优点:get和set调用花费常数时间,也就是查询的速度快
      2. 缺点:新项的插入和现有项的删除代价昂贵,也就是添加删除的速度慢
    2. LinkedList(链表结构)
      1. 优点:新项的插入和和现有项的删除开销很小,即添加和删除的速度快
      2. 缺点:对get和set的调用花费昂贵,不适合做查询
    3. 面试中经常问到一些深入的东西,比如:
      1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;
      2. 底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向循环链表数据结构;
      3. 插入和删除是否受元素位置的影响: ① ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。 比如:执行add(E e)方法的时候, ArrayList 会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是O(1)。但是如果要在指定位置 i 插入和删除元素的话(add(int index, E element))时间复杂度就为 O(n-i)。因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向前移一位的操作。 ② LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响,都是近似 O(1)而数组为近似 O(n)。
      4. 是否支持快速随机访问: LinkedList 不支持高效的随机元素访问,而ArrayList 实现了RandmoAccess 接口,所以有随机访问功能。快速随机访问就是通过元素的序号快速获取元素对象(对应于get(int index)方法)。
      5. 内存空间占用: ArrayList的空间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)。

    3. List、Set、Map 之间的区别是什么?

    1. List、Set、Map 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。
    2. 三者之间的区别,如下表:
      在这里插入图片描述

    4. HashMap 和 Hashtable 有什么区别?

    1. 存储:HashMap 运行 key 和 value 为 null,而 Hashtable 不允许。
    2. 线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。
    3. 推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使用,推荐在单线程环境下使用 HashMap 替代,如果需要多线程使用则用 ConcurrentHashMap 替代。

    5. Comparable和Comparator区别?

    1. Comparable接口
      1. 实现Comparable接口类表示这个类型的对象可以进行比较大小的。 这种可以比较大小的对象可以进行自然排序。
    2. Comparator接口
      1. 比较器用于实现对象任意属性进行比较大小。
      2. 在排序时候可以通过指定属性比较器实现任意属性排序。
    3. 在排序时候Comparable接口用于进行自然排序,而Comparator接口进行自定义排序,自定义排序更加灵活方便而常用。
    4. 设计上Comparable不推荐使用,因为对程序本身具有侵入性。

    6. 简述HashMap的工作原理?

    1. HashMap是面向查询优化的数据结构,查询性能优异。
    2. 在其内部利用数组存储数据。
    3. 插入数据时,先根据Key的HashCode计算出数组的下标位置,再利用Key的equals()方法检查是否以存在重复的Key,如果不重复直接存储到数组中,如果重复就作为链表存储到散列桶中。
    4. 插入的数据和数组容量的比值大于加载因子则进行数组扩容,并重新散列,默认的加载因子为“0.75”。
    5. 查询时,先根据Key的HashCode计算出数组的下标位置,再利用Key的equals()方法检查到Key的位置,如果找到返回Key对应的Value,否则返回Null。
    6. 由于利用Key的HashCode直接计算出数据的存储位置,由于直接确定数据的存储位置,相对于其他查找方式,查询效率非常高。

    7. Iterator 怎么使用?有什么特点?

    1. Iterator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。
    2. Iterator 使用代码如下:
      	List<String> list = new ArrayList<>();
      	Iterator<String> it = list. iterator();
      	while(it. hasNext()){
      		String obj = it. next();
      		 System. out. println(obj);
      	}
      
    3. Iterator 的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出 ConcurrentModificationException 异常。

    8. ArrayList 和 Vector 的区别是什么?

    1. 线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的。
    2. 性能:ArrayList 在性能方面要优于 Vector。
    3. 扩容:ArrayList 和 Vector 都会根据实际的需要动态的调整容量,只不过在 Vector 扩容每次会增加 1 倍,而 ArrayList 只会增加 50%。

    9. Collection 和 Collections 有什么区别?

    1. Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如 List、Set 等。
    2. Collections 是一个包装类,包含了很多静态方法,不能被实例化,就像一个工具类,比如提供的排序方法: Collections. sort(list)。

    10. HashMap 的实现原理?

    1. HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。
    2. 当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket 里。
    3. 当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是用链表和红黑树存储相同 hash 值的 value。
    4. 当 hash 冲突的个数比较少时,使用链表否则使用红黑树。
    5. HashMap 对应的线程安全类是 ConcurrentHashMap
    展开全文
  • 【Java并发编程】6.常见并发容器

    千次阅读 多人点赞 2020-03-29 14:46:57
    ArrayBlockingQueue和LinkedBlockingQueue对比: 实现:ArrayBlockingQueue底层上数组,ArrayBlockingQueue用Node包装后的链表(包含包装导致更大更冗余易触发GC) 初始化:ArrayBlockingQueue必须要求初始值,...

    在这里插入图片描述
    在这里插入图片描述
    多线程环境下Java提供的一些简单容器都无法使用了要用到JUC中的大部分容器,由于ConcurrentHashMap是高频考点用到也比较多因此着重写了下,其余的容器就先Mark下。奥利给

    跳表

    简而言之跳表就是多层链表的结合体,跳表分为许多层(level),每一层都可以看作是数据的索引,这些索引的意义就是加快跳表查找数据速度。每一层的数据都是有序的,上一层数据是下一层数据的子集,并且第一层(level 1)包含了全部的数据;层次越高,跳跃性越大,包含的数据越少。并且随便插入一个数据该数据是否会是跳表索引完全随机的跟玩骰子一样,redis中的zset底层就是跳表数据结构。并且跳表的速度几乎接近红黑树了。
    跳表包含一个表头,它查找数据时,是从上往下,从左往右进行查找。现在“需要找出值为37的节点”为例,来对比说明跳表和普遍的链表。
    在这里插入图片描述

    1. 没有跳表查询
      比如我查询数据37,如果没有上面的索引时候路线如下图:
    展开全文
  • 这个问题的确不难,如何回答的深度,条理才是真正的考点。作为一位面试官,我给大家画个方向,分析下这个问题应该怎么回答。 正文 这个问题的重心不仅仅在于考察对包装类存在合理性的认识,也在考察对基本数据...

    相信每一个刚走上互联网行业的小白,都在面试的时候被问过这个问题。这个问题的确不难,如何回答的有深度,有条理才是真正的考点。作为一位面试官,我给大家画个方向,分析下这个问题应该怎么回答。

    正文

    这个问题的重心不仅仅在于考察对包装类存在合理性的认识,也在考察对基本数据类型存在意义的理解。

    我们都知道在Java语言中,new一个对象存储在堆里,我们通过栈中的引用来使用这些对象。但是对于经常用到的一系列类型如int、boolean… 如果我们用new将其存储在堆里就不是很高效——特别是简单的小的变量。所以,同C++ 一样Java也采用了相似的做法,决定基本数据类型不是用new关键字来创建,而是直接将变量的值存储在栈中,方法执行时创建,结束时销毁,因此更加高效。

    如此,基本类型的存在就变的即合理,又意义重大。

    而Java是一门面向对象的编程语言,但是Java中的基本数据类型却不是面向对象的,并不具有对象的性质,这在实际生活中存在很多的不便。为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起来”,使得Java具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作,方便涉及到对象的操作。

    我们在使用集合类型时,就一定要使用包装类型,因为容器都是装object的,基本数据类型显然不适用。

    逻辑上来讲,java只有包装类就够了,为了运行速度,需要用到基本数据类型。实际上,任何一门语言设计之初,都会优先考虑运行效率的问题,所以二者同时存在是合乎情理的。

    区别

    接下来我在几方面总结下二者的区别:

    1.声明方式不同:

    基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;

    2.存储方式及位置不同:

    基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用;

    3.初始值不同:

    基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;

    4.使用方式不同:

    基本类型直接赋值直接使用就好,而包装类型在集合(如:Collection、Map)时会使用到。

    小结

    我感觉很多同学对这个问题回答的不以为然。其实,如果更深入的聊,从这里可以很自然的过渡到java “内存模型”上来。所以,这个问题回答的深度,就可以大致看出对“内存模型”的理解程度,java “内存模型”的重要性就不用我多讲了吧。

    更多精彩,请关注我的"今日头条号":Java云笔记
    随时随地,让你拥有更新,更便捷的掌上云服务

    展开全文
  • UE4入门-常见基本数据类型-容器

    千次阅读 2017-11-03 17:16:04
    常见的类 TArray、TMap 和 TSet。它们的大小均为动态,因此可变为所需的任意大小 TArray:虚幻引擎中的数组 主要使用的容器类为 TArray。TArray 类负责同类其他对象(称为元素)序列的所有权和组织。TArray...
  • Java容器有哪些?哪些是同步容器,哪些是并发容器?一、基本概念新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格...
  • Java容器(一):容器总结

    千次阅读 2017-02-08 20:29:35
    Java容器家族图容器从最大的概念来分:分为Collection和Map,区别就是Collection是一个槽的,Map是两个槽的(键值对) Collection划分为:List,Set,Queue List接口常见有:ArrayList,LinkedList,AbstractList...
  • vector容器的三种遍历方法

    万次阅读 多人点赞 2015-12-02 10:53:30
    STL(Standard Template Library)中vector容器是最常见容器之一,设计中经常需要遍历vector容器,本文介绍三种常用的vector遍历方式。 一、下标索引遍历  vector容器底层其实是动态数组的包装,因此在其内部重载...
  • 同步容器与并发容器类简介

    千次阅读 2018-09-02 11:03:56
    同步容器类   同步容器类包括Vector和HashTable,二者都是早期JDK的一部分,此外还包括在JDK1.2当中添加的一些功能相似的类,这些同步的封装类是由Collections.synchronizedXxx等工厂方法创建的。这些类实现线程...
  • 容器的扩展通常来说,开发者不需要通过继承ApplicationContext来实现自己的子类扩展功能。但是Spring IoC容器确实可以通过实现接口来增加一些功能。下面将描述一下这些接口。通过BeanPostProcessor定义Bean...
  • docker常见面试题

    千次阅读 2021-01-28 00:58:04
    docker容器有几种状态?docker容器内部机制?容器与主机之间的数据拷贝?启动容器并挂在目录? 4.Dockerfile中最常见的指令是什么?Dockerfile中的命令COPY和ADD命令有什么区别? (1)常见指令:FROM + RUN + CMD...
  • docker容器技术基础

    千次阅读 2018-10-24 15:56:48
    什么是容器 容器是对应用程序及其依赖关系的封装。 容器的优点 容器与主机的操作系统共享资源,提高了效率,性能损耗低 容器具有可移植性 容器是轻量的,可同时运行数十个容器,模拟分布式系统 ...
  • 容器的理解

    千次阅读 2014-09-30 22:44:39
    这篇博客主要是说一说容器,在之前写了一些关于JAVA容器类的内容,必要对容器进行一次阐述。其实我本人对概念这方面内容不是非常在行,时候对内容和细节比较关注,所以后面想想还是必要占的更加高层一些,因为...
  • IT开发当前最重要的三个趋势是devops和敏捷开发、无代码和低代码开发,以及使用Kubernetes调度的容器部署微服务。很明显,所有这些云和容器的采用将在2019年继...
  • sidecar 容器Kubernetes is an open-source container orchestration engine for automating deployment, scaling, and management of containerized applications. A pod is the basic building block of ...
  • 容器安全01:docker漏洞扫描

    千次阅读 2020-06-19 19:21:47
    镜像是容器的最基础的载体,docker作为最流行的容器runtime,其最大的贡献就是把镜像作为容器应用的标准交付方式,镜像包含了容器运行的所有基础文件,可以说镜像的安全就决定了容器安全。 但现实不乐观,在...
  • C++容器用法简介——stack

    千次阅读 2016-08-10 12:09:03
     stack是一种容器适配器(STL的容器分为顺序容器和关联容器容器适配器,是对这两类容器进行包装得到的具有更强的约束力的容器),被设计来用于操作先进后出(FILO)结构的情景,在这种情况下, 元素的插入和删除...
  • Java 容器系列总结

    千次阅读 2021-02-04 17:53:44
    当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器来保存,这个容器就是数组,但是,使用数组存储对象具有一定的弊端, 因为我们在实际开发中,存储的数据的类型是多种多样的,于是,就出现了“集合”...
  • 常见的Docker用例涉及使用容器来托管长期运行的服务。 这些是Web应用程序,数据库或消息队列之类的东西-连续运行的服务,正在等待服务请求。 Docker另一个有趣的用例是包装短期的单用途任务。 也许这是需要定期...
  • java 容器使用

    千次阅读 2010-03-29 17:25:00
    在Java中许多的容器集合。初一看起来有些糊涂,特别是对刚接触Java来说(至少我当初就是这样的)!其实稍微细心,深入一点点就会发现原来一切都是规律的。我想别的事情也会是如此。 Java中的容器,接口都是由...
  • 最近一直在和容器打交道,甚至前面的博文,我们也介绍了Spring的IoC的原理以及源码,但是回头看看,介绍的还是深了,不够通俗易懂,深入浅出。从这篇博文开始,一步步的重构,最后实现一个基本的Spring框架的雏形,...
  • 支持读取 GOB 容器文件并提供一些常见文件类型的包装器。 支持的文件类型 BM - 多重、压缩和未压缩。 FME - 压缩和未压缩。 WAX - 压缩和未压缩。 味精 朋友 CMP 3DO GOL - 进行中 依赖关系 Boost 1.5.x - ...
  • Docker容器学习笔记一

    千次阅读 2020-07-04 13:04:36
    Docker容器学习笔记一(狂神说Java) 狂神说B站视频:https://www.bilibili.com/video/BV1og4y1q7M4?p=1 Docker容器学习笔记二(狂神说Java): 教程docker:https://www.runoob.com/docker/docker-tutorial.html ...
  • 【J2SE 】1136 容器之旅

    千次阅读 热门讨论 2013-08-31 16:03:41
    来系统全面的了解容器,以及容器的应用,下面就进入我们的容器之旅吧! 1.什么是容器 ?  用来存储和组织其他对象的对象 。我们也可以这样来理解,容器其实类似于我们生活中的菜篮子、桶等装东西的器皿,我们可以把...
  • Java的集合容器框架中,主要四大类别:List、Set、Queue、Map,大家熟知的这些集合类ArrayList、LinkedList、HashMap这些容器都是非线程安全的。 如果多个线程并发地访问这些容器时,就会出现...
  • 前言 在上一篇文章:【小家Spring】Spring IOC容器启动流程 AbstractApplicationContext#...Bean工厂可以简单理解为一个钩子容器,里面注册众多的BeanFactoryPostProcessor以及BeanFactoryPostProcessor,接...
  • 作者 | 杨育兵(沈陵) 阿里巴巴高级技术专家 我们从 2016 年开始在集团推广全面的镜像化容器化,今年是集团全面镜像化容器化后的第 4 个 双11,PouchContainer 容器技术已经成为集团所有在线应用运行的运行时底...
  • kubernetes pod中多容器通信

    万次阅读 2018-12-14 14:05:27
    容器通常是为了解决一个单一的、特定的问题;如微服务,但在现实世界中,通常需要多个容器,来实现一个完整的解决方案。在这篇文章中,我们将谈论结合多个容器集成进单一的Kubernetes节点,即容器互联通信。 什么是...
  • Spring框架:核心容器总结

    万次阅读 多人点赞 2017-10-22 19:14:19
    首先我们看到Spring框架被分成7部分:Core Container(核心容器),Data Access/Integration、WEB、AOP、Instrumentation、Messaging(消息)和Test(测试),这篇博客我们把注意点放到最核心的核心容器上来进行总结。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,301
精华内容 16,520
关键字:

常见的包装容器有