精华内容
下载资源
问答
  • 云服务器还需要安装数据库吗

    千次阅读 2019-04-16 17:24:22
    在了解了这两点之后,我们可以知道他们之间的关系,而是否需要给云服务器安装数据库也就有了答案。 云服务器 这是云计算技术发展出现的一款产品,为用户提供包括网络、存储、计算等在内的各种功能,在使用过程中,...

    云服务器还需要安装数据库吗?这是很多刚刚接触网站建设开发工作的用户会问到的问题,在回答这个问题之前,我们需要知道什么是云服务器和数据库,以及它们能做什么。在了解了这两点之后,我们可以知道他们之间的关系,而是否需要给云服务器安装数据库也就有了答案。

    云服务器
    这是云计算技术发展出现的一款产品,为用户提供包括网络、存储、计算等在内的各种功能,在使用过程中,云GPU服务器 www.xrcloud.net/gpu 的用途是“放”各种服务,如网站内容、用户数据等。

    云ECS服务器  www.xrcloud.net/ecs作为一种可随时获取、处理能力可弹性伸缩的计算服务,能够帮助客户构建可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,能提升运维效率、降低用户的各项成本。


    数据库
    简而言之,数据库可以视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。它是以一定方式存储在一起,能与多个用户共享、具有尽可能小的冗余度、与应用批次独立的数据集合。

    在网站运行过程中,数据库的作用是将用户上传的数据以自己支持的语言(如PHP、Python等)编码存储,无论是用户访问网站还是站长修改网站,这些数据都是从数据库中读取出来的。


    两者的关系
    云服务器和和数据库的关系,可以理解为云服务器是房间,而数据库是柜子,柜子需要在房间里放置,但是这个房间里不一定要放柜子,可以放在别的房间里,需要里面的东西时去拿就好了。例如把网站放在云服务器上,数据库放在另一个云服务器上,放网站的就是Web服务器,放数据库的就是数据库服务器。

    不过云服务商是提供一种名为云数据库的服务,预设好的各种模板、实例都在上面,用户在使用的时候,直接部署即可,具备完善的监控、告警功能,可以立即投入使用,立即创造价值。

    因此,新睿云 www.xrcloud.net 云服务器不一定要安装数据库,但是数据库一定要安装在云服务器上才能被使用。

    展开全文
  • 日常我们可以通过视频来与...国内多方通信服务业务是指通过多方通信平台和公用通信网或互联网实现国内两点或多点之间实时交互式或点播式的话音、图像通信服务。包括国内多方电话会议服务业务、国内可视电话会议服...

    日常我们可以通过视频来与远方的亲朋好友进行沟通,也可以通过聊天软件发语音进行问候。那么,这种服务方式是什么呢?这就是国内多方通信服务业务,经营该业务的话,是需要办理国内多方通信许可证的。那么,国内多方通信许可证是什么呢?

    国内多方通信服务业务是指通过多方通信平台和公用通信网或互联网实现国内两点或多点之间实时交互式或点播式的话音、图像通信服务。包括国内多方电话会议服务业务、国内可视电话会议服务业务和国内互联网会议电视及图像服务业务等。

    企业在开展国内多方通信服务业务,不管是多方电话会议、多方可视电话会议、多方互联网视频会议,还是互联网电话、网络电话、多人语音即时通信等业务,都需要办理国内多方通信服务业务经营许可证。

    办理国内多方通信许可证的话,要满足以下条件:

    1、为依法设立的公司;

    2、公司注册资金满100万元,(地网100万元,全网1000万元)人民币以上,且经营者不涉及外资。

    3、有与开展经营活动相适应的资金和专业人员;

    4、有必要的场地、设施及技术方案;

    5、有为用户提供长期服务的信誉和能力;

    6、公司及主要出资者和主要经营管理人员三年内无违法电信监督管理制度的违法记录;

    7、国家规定的其他条件。

    企业申办国内多方通信许可证不仅代表了公司的实力同样代表了公司的合法经营的需要,还能够为企业研发更多的无形资产及知识产权。

    a0e879401d699e89234d0259ce5ebf82.png

    代办国内多方通信服务业务许可证流程

      1、核实客户公司办理条件

      2、客户公司提供相关资料

      3、提交通信管理局审批

      4、撰写办理材料材料经由客户公司确认并

      5、签字、盖章客户领取受理通知书

      6、领取国内多方通信服务业务许可证
    关注我,了解更多企业专业知识!

    展开全文
  • 今天帮客户设计一款VA的...偏光片容易脱落,正常丝印面积不能超过可视区域面积的一半,除了个另外还有一点也很重要,就是超过百模的小尺寸玻璃,是做不了丝印的,包括边框的黑色丝印也不能做,因为玻璃尺寸小...

    今天帮客户设计一款VA的液晶屏图纸,基本是满屏的彩色丝印,一共三个颜色,红色、黄色、绿色,丝印面积太大的话会导致偏光片的附着力降低,偏光片是靠打胶粘在玻璃上的,这个色块是在玻璃和偏光片之间,这样就导致了偏光片和玻璃之间的胶少了,偏光片容易脱落,正常丝印面积不能超过可视区域面积的一半,除了这个另外还有一点也很重要,就是超过两百模的小尺寸玻璃,是做不了丝印的,包括边框的黑色丝印也不能做,因为玻璃尺寸小,重量轻,丝印的话,偏光片上面的油墨色块容易把玻璃整个粘起来,贴片光片的时候会带着玻璃移动,把ITO玻璃粘走,这样就阻碍了偏光的粘贴,使得生产既费时又费力,也很大程度上带来大批次的不良品,这样的设计也是不可行的。
    在这里插入图片描述

    展开全文
  • 症状:安装了防火墙(包括WINXP系统自带的防火墙),出现无法Ping通,或者是访问共享资源的时候提示"XXX无法访问"、"您可能没有权限使用网络资源"、"请与台服务器的管理员联系以查明您是否有访问权限"、"找不到...
  • 上一篇咱们讲了ImageLoader的缓存策略,那么Glide的缓存策略...先来看一看Glide用了哪些缓存策略模式,如下:是不是少了,没错和缓存有关的就这两个类,MemoryCache是缓存的接口,MemoryCacheAdapter和LruResourc...

    上一篇咱们讲ImageLoader的缓存策略,那么Glide的缓存策略相较于ImageLoader缓存有什么优势吗?它们之间有什么样的差别,或者说性能方面,那一个更好,注意咱们这里所介绍的缓存是不包括sd卡存储的。

    先来看一看Glide用了哪些缓存策略模式,如下:


    是不是少了点,没错和缓存有关的就这两个类,MemoryCache是缓存的接口,MemoryCacheAdapter和LruResourceCache是实现类

    public class MemoryCacheAdapter implements MemoryCache {
    
      private ResourceRemovedListener listener;
    
      @Override
      public int getCurrentSize() {
        return 0;
      }
    
      @Override
      public int getMaxSize() {
        return 0;
      }
    
      @Override
      public void setSizeMultiplier(float multiplier) {
        // Do nothing.
      }
    
      @Override
      public Resource<?> remove(Key key) {
        return null;
      }
    
      @Override
      public Resource<?> put(Key key, Resource<?> resource) {
        listener.onResourceRemoved(resource);
        return null;
      }
    
      @Override
      public void setResourceRemovedListener(ResourceRemovedListener listener) {
        this.listener = listener;
      }
    
      @Override
      public void clearMemory() {
        // Do nothing.
      }
    
      @Override
      public void trimMemory(int level) {
        // Do nothing.
      }
    }

    但是MemoryCacheAdapter的实现方法里面并没有实现具体的业务,看名字是实现了适配器模式,目前这个类没用,是为了以后做扩展用的,先不管它。除了它就只剩LruResourceCache这个缓存策略类了,也是用了最少使用算法(经常被使用的对象在总的对象存储的内存超过阈值时被回收的概率低)。它也是和ImageLoader一样用了下面这个集合类,在此不再深究。

    LinkedHashMap<T, Y> cache = new LinkedHashMap<>(100, 0.75f, true);

    就这一个缓存策略,这样就完了吗,不不不,远没有想象的那么简单,Glide在缓存的Bitmap所占内存的总大小超过阈值的去除最少使用的Bitmap的时候,总是会回调下面这个方法进行Bitmap的回收保存,如下:

     protected void onItemEvicted(Key key, Resource<?> item) {
        if (listener != null) {
          listener.onResourceRemoved(item);
        }
      }

    为什么要保存一部分Bitmap?而不是直接放弃它,让它回收,这样的做法的好处就是避免不必要的内存申请和回收的时间上的浪费,如果内存申请和回收太频繁的话就会引起内存抖动,内存抖动在用户看来那就是界面已经在视觉上可以看出卡顿了有木有,这个是无法忍受的,这也是我们常说的以内存换速度的方式,合理的利用内存不是内存浪费,这也是Glide强于ImageLoader的一个点了。ok,来具体看一下它是怎么重利用Bitmap内存的。

    这里注意一下,Glide缓存的所有资源都是Resource的实现类,Bitmap被它封装在内部的变量中,也是说Glide没有直接操作Bitmap,而是用了Resource这个包装类来操作Bitmap。所以说看回收的话,我们直接看com.bumptech.glide.load.resource.bitmap下的BitmapResource这个类就好了,回收的方法如下:

     public void recycle() {
        bitmapPool.put(bitmap);
      }
    最终用的com.bumptech.glide.load.engine.bitmap_recycle包下的LruBitmapPool来进行回收的,继续看
     public synchronized void put(Bitmap bitmap) {
        if (bitmap == null) {
          throw new NullPointerException("Bitmap must not be null");
        }
        if (bitmap.isRecycled()) {
          throw new IllegalStateException("Cannot pool recycled bitmap");
        }
        if (!bitmap.isMutable() || strategy.getSize(bitmap) > maxSize
            || !allowedConfigs.contains(bitmap.getConfig())) {
          if (Log.isLoggable(TAG, Log.VERBOSE)) {
            Log.v(TAG, "Reject bitmap from pool"
                    + ", bitmap: " + strategy.logBitmap(bitmap)
                    + ", is mutable: " + bitmap.isMutable()
                    + ", is allowed config: " + allowedConfigs.contains(bitmap.getConfig()));
          }
          bitmap.recycle();
          return;
        }
    
        final int size = strategy.getSize(bitmap);
        strategy.put(bitmap);
        tracker.add(bitmap);
    
        puts++;
        currentSize += size;
    
        if (Log.isLoggable(TAG, Log.VERBOSE)) {
          Log.v(TAG, "Put bitmap in pool=" + strategy.logBitmap(bitmap));
        }
        dump();
    
        evict();
      }

    这个方法的意思就是首先判断需要回收的Bitmap是否已经被回收了,它所占内存总大小是否超过最大值(这里的最大值是默认屏幕width*屏幕height*Argb_8888(也就是4)*4),也就是说最大值是你当前手机满屏幕像素所占内存大小的4倍,是否包括这个图片配置属性(默认包括android的Bitmap的所有的属性),如果这些都不满足的话将Bitmap缓存到回收集合中,如果满足一项,回收Bitmap所占内存,接下来判断所有在回收集合中的Bitmap总占内存是否超过阈值,如果超过的话就移除最少使用的回收,实现如下:

    private synchronized void trimToSize(int size) {
        while (currentSize > size) {
          final Bitmap removed = strategy.removeLast();
          // TODO: This shouldn't ever happen, see #331.
          if (removed == null) {
            if (Log.isLoggable(TAG, Log.WARN)) {
              Log.w(TAG, "Size mismatch, resetting");
              dumpUnchecked();
            }
            currentSize = 0;
            return;
          }
          tracker.remove(removed);
          currentSize -= strategy.getSize(removed);
          evictions++;
          if (Log.isLoggable(TAG, Log.DEBUG)) {
            Log.d(TAG, "Evicting bitmap=" + strategy.logBitmap(removed));
          }
          dump();
          removed.recycle();
        }
      }

    接下来看一下获取的方法:

     public Bitmap get(int width, int height, Bitmap.Config config) {
        Bitmap result = getDirtyOrNull(width, height, config);
        if (result != null) {
          // Bitmaps in the pool contain random data that in some cases must be cleared for an image
          // to be rendered correctly. we shouldn't force all consumers to independently erase the
          // contents individually, so we do so here. See issue #131.
          result.eraseColor(Color.TRANSPARENT);
        } else {
          result = Bitmap.createBitmap(width, height, config);
        }
    
        return result;
      }
    private synchronized Bitmap getDirtyOrNull(int width, int height, Bitmap.Config config) {
        // Config will be null for non public config types, which can lead to transformations naively
        // passing in null as the requested config here. See issue #194.
        final Bitmap result = strategy.get(width, height, config != null ? config : DEFAULT_CONFIG);
        if (result == null) {
          if (Log.isLoggable(TAG, Log.DEBUG)) {
            Log.d(TAG, "Missing bitmap=" + strategy.logBitmap(width, height, config));
          }
          misses++;
        } else {
          hits++;
          currentSize -= strategy.getSize(result);
          tracker.remove(result);
          normalize(result);
        }
        if (Log.isLoggable(TAG, Log.VERBOSE)) {
          Log.v(TAG, "Get bitmap=" + strategy.logBitmap(width, height, config));
        }
        dump();
    
        return result;
      }

    这两个方法的意思就是首先从回收池中获取,如果获取到Bitmap,则复用这个Bitmap,并把当前的bitmap的颜色值清空,如果没有的话,直接创建一个新的Bitmap返回,下面这个方法是用来判断这个回收池中有没有符合这个Bitmap大小的Bitmap的内存

     public Bitmap get(int width, int height, Bitmap.Config config) {
        final int size = Util.getBitmapByteSize(width, height, config);
        Key key = keyPool.get(size);
    
        Integer possibleSize = sortedSizes.ceilingKey(size);
        if (possibleSize != null && possibleSize != size && possibleSize <= size * MAX_SIZE_MULTIPLE) {
          keyPool.offer(key);
          key = keyPool.get(possibleSize);
        }
    
        // Do a get even if we know we don't have a bitmap so that the key moves to the front in the
        // lru pool
        final Bitmap result = groupedMap.get(key);
        if (result != null) {
          result.reconfigure(width, height, config);
          decrementBitmapOfSize(possibleSize);
        }
    
        return result;
      }

    为什么要传宽和高还有config,因为你在复用Bitmap的时候,你必须要满足你当前要创建的Bitmap所占内存必须小于等于你缓冲池中的BitMap大小,并且格式也要保持一致,这样才能保证准确的复用。下面来看一下复用的方法

    private static void applyMatrix(@NonNull Bitmap inBitmap, @NonNull Bitmap targetBitmap,
          Matrix matrix) {
        BITMAP_DRAWABLE_LOCK.lock();
        try {
          Canvas canvas = new Canvas(targetBitmap);
          canvas.drawBitmap(inBitmap, matrix, DEFAULT_PAINT);
          clear(canvas);
        } finally {
          BITMAP_DRAWABLE_LOCK.unlock();
        }
      }
    

    这里的第一个参数是你需要显示的Bitmap,而第二参数是回收池里的Bitmap,很显然这个方法是把你需要显示的Bitmap通过回收池的方法将已有内存交给它,通俗的将就是将显示的Bitmap画在回收池里面Bitmap的内存上。这里可能你会问这不是还是创建了一个Bitmap吗?只是它创建了然后马上销毁了罢了。好,接下来重点来了,看一看它是怎么创建要显示的Bitmap的。

    要显示的Bitmap的创建是在解码器里面创建的,这里只看流式解码器,位于com.bumptech.glide.load.resource.bitmap包下的StreamBitmapDecoder类decode方法,如下:

    public Resource<Bitmap> decode(InputStream source, int width, int height, Options options)
          throws IOException {
    
        // Use to fix the mark limit to avoid allocating buffers that fit entire images.
        final RecyclableBufferedInputStream bufferedStream;
        final boolean ownsBufferedStream;
        if (source instanceof RecyclableBufferedInputStream) {
          bufferedStream = (RecyclableBufferedInputStream) source;
          ownsBufferedStream = false;
        } else {
          bufferedStream = new RecyclableBufferedInputStream(source, byteArrayPool);
          ownsBufferedStream = true;
        }
    
        // Use to retrieve exceptions thrown while reading.
        // TODO(#126): when the framework no longer returns partially decoded Bitmaps or provides a
        // way to determine if a Bitmap is partially decoded, consider removing.
        ExceptionCatchingInputStream exceptionStream =
            ExceptionCatchingInputStream.obtain(bufferedStream);
    
        // Use to read data.
        // Ensures that we can always reset after reading an image header so that we can still
        // attempt to decode the full image even when the header decode fails and/or overflows our read
        // buffer. See #283.
        MarkEnforcingInputStream invalidatingStream = new MarkEnforcingInputStream(exceptionStream);
        UntrustedCallbacks callbacks = new UntrustedCallbacks(bufferedStream, exceptionStream);
        try {
          return downsampler.decode(invalidatingStream, width, height, options, callbacks);
        } finally {
          exceptionStream.release();
          if (ownsBufferedStream) {
            bufferedStream.release();
          }
        }
      }

    然后最终是通过Downsampler这个类来完成创建显示的Bitmap的,如下方法:

    public Resource<Bitmap> decode(InputStream is, int requestedWidth, int requestedHeight,
          Options options, DecodeCallbacks callbacks) throws IOException {
        Preconditions.checkArgument(is.markSupported(), "You must provide an InputStream that supports"
            + " mark()");
    
        byte[] bytesForOptions = byteArrayPool.get(ArrayPool.STANDARD_BUFFER_SIZE_BYTES, byte[].class);
        BitmapFactory.Options bitmapFactoryOptions = getDefaultOptions();
        bitmapFactoryOptions.inTempStorage = bytesForOptions;
    
        DecodeFormat decodeFormat = options.get(DECODE_FORMAT);
        DownsampleStrategy downsampleStrategy = options.get(DOWNSAMPLE_STRATEGY);
        boolean fixBitmapToRequestedDimensions = options.get(FIX_BITMAP_SIZE_TO_REQUESTED_DIMENSIONS);
    
        try {
          Bitmap result = decodeFromWrappedStreams(is, bitmapFactoryOptions,
              downsampleStrategy, decodeFormat, requestedWidth, requestedHeight,
              fixBitmapToRequestedDimensions, callbacks);
          return BitmapResource.obtain(result, bitmapPool);
        } finally {
          releaseOptions(bitmapFactoryOptions);
          byteArrayPool.put(bytesForOptions, byte[].class);
        }
      }

    这里注意 BitmapFactory.Options的inTempStorage 属性的用法,这个属性设置的话Bitmap的内存占用将保存在这个字节数组中,而看这句代码byteArrayPool.get(ArrayPool.STANDARD_BUFFER_SIZE_BYTES, byte[].class),又是从回收池里获取的有木有,那么就算创建显示的Bitmap也是用了原来的内存占用,这样就少了很多的内存重新申请和销毁所损耗的时间,也就减少了卡顿所发生的概率。

    ok,这就是Glide强于ImageLoader的缓存的策略了,有没有更好的策略呢,当然你可以把Bitmap占用内存改到native中,

    Fresco就是这么搞的,但是android O又将Bitmap内存占用改到native中了,这的确比较蛋疼。






    展开全文
  •  父子之间可以进行个男子汉的对话;母女之间可以像亲姐妹那样交换意见……做到知无不言言无不尽,多痛快,多尽兴!要做到一点没有日常的积累是不行的。 平时的熏陶,默默无闻的身教,不是比说句“寄语”更...
  • GSP5.exe

    2020-04-01 09:16:40
    选取圆及圆上2点作弧(从第一点逆时针方向到第二点之间的一段弧);选取圆上三点作弧(与法2相似,只是无需选中圆,作完弧后,可以隐藏原来的圆,可见新作的弧) 扇形和弓形 与三角形内部相似(先选中三个顶点),...
  • 预测错误可能会由这两个分量或者这两个中的任何一个造成。 在这里,我们将讨论由方差所造成的有关误差。 岭回归通过收缩参数λ(lambda)解决多重共线性问题。 看下面的公式: 在这个公式中,有两个...
  • SSO-WebDemo

    2013-08-12 20:25:57
    两点需要指出的是: 单一的用户信息数据库并不是必须的,有许多系统不能将所有的用户信息都集中存储,应该允许用户信息放置在不同的存储中,如下图所示。事实上,只要统一认证系统,统一ticket的产生和效验,无论...
  • 数据结构高分笔记

    2018-10-09 10:11:43
    也做了类似的处理,并且在本书中穿插讲解了一些考试大纲中没有明文规定,但是很多算法题目中大量用到的算法设计思想,来帮助大家提高解算法设计题的能力,比如搜索(打印图中结点之间的所有路径)、分治法...
  • php高级开发教程说明

    2008-11-27 11:39:22
    在程序课上讲授的这两种解决方案, 都不令人满意,定义一种类型t p I n t M y I n t e g e r C o u n t e r,然后声明一个变量i n s t M Y I n t e g e r C y u n t e r I n s t a n c e。如果仅仅需要遍历一个数组...
  • Paint in 3D V1.9.2

    2020-08-18 18:25:49
    贯通绘制 - 使用此混合模式在个 3D 点之间绘制所有像素。适合于非常强烈的激光光束特效,来贯穿一切。 ? 渐变绘制 - 使用此工具的任何混合模式,渐变绘制你的纹理中的所有像素。非常适合随着时间逐渐淡化的...
  • 至少有两点值得指出: 首先,作者完全采用了一种问答的形式来组织和介绍相关内容。全书从头到尾共设计了472个问题(很多是由学生提出来的),有问有答,循序渐进,逐步将各种图像技术依次介绍。这种形式除能帮助...
  • 问题3-11:在连续ARQ协议中,如果A向B发送数据帧而B只向A发送确认帧(即假定B没有数据帧向A发送),那么这两种帧的序号序列各有什么特点? 问题3-12:在连续ARQ协议中,如果B收到A发送的数据帧的序号没有落在B的接收...
  •  本书是一本关于oracle database 9i、10g 和11g 数据库体系结构的权威图书,涵盖了所有重要的oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及...
  • 包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体的例子来充分介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作的,如何使用个特性来开发...
  • java面试宝典

    2013-02-28 16:04:01
    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...
  • 问题3-33:在有的文献中会见到runt和jabber这两个名词,它们是什么意思? 问题3-34:当局域网刚刚问世时,总线形的以太网被认为可靠性比星形结构的网络好。但现在以太网又回到了星形结构,使用集线器作为交换结点。...
  • 他是几本书的作者,这包括Professional SQL Server 2005 XML(Wrox,2006)和Professional LINQ(Wrox,2008),他还为SQL PASS Community Connector写每两周一次的特辑文章。他也为好几个网站供稿,这包括Wrox...
  • Win32多线程程序设计--源代码

    热门讨论 2012-04-22 17:09:08
     对于中译本,我有以下两点说明:  1. 译本内的程序实例直接取自书附光盘。如果与英文版书面代码稍有出入,恐怕是因为作者直接在实际程序上做了点小变动而未能及时反应到书面。如果出现这种差异,我会在程序代 ...
  • 1.3.5 给定一个整数数组和一个整数,返回两个数组的索引,这两个索引指向的数字的加和等于指定的整数。需要最优的算法,分析算法的空间和时间复杂度 1.3.6 假如给你一个新产品,你将从哪些方面来保障它的质量? ...
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    5. JSP和Servlet有哪些相同和不同,他们之间的联系是什么? 28 6. 四种会话跟踪技术 28 7. Request对象的主要方法: 28 8. jsp有哪些动作?作用分别是什么 29 9. 种跳转方式分别是什么?有什么区别? 29 10. JAVA...
  • SD留言本.rar

    2019-05-24 06:53:26
    的确,我可以给网站加上一个QQ在线状态,点击即可聊天,但是只是相对于个人之间的秘密对话,第三个人是看不见的。比如用户的留言是针对网站的改版建议的,那么要是以留言的形式展现出来,就会有更多的人知道你们...
  • 一讲中,我们主要是了解一下 Linux 的概况,以及对 Linux 有一个初步的感性认识。 一.什么是Linux? Linux 是一个以 Intel 系列 CPU(CYRIX,AMD 的 CPU也可以)为硬件平台,完全免费的 UNIX 兼容系统,完全...
  •  Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常...
  • 右上角 Star,点亮你的头像,开源有你的贡献,爱你 ! 推荐选择在线 wiki阅读(有目录),内容与Github同源,解决 Github 访问速度慢的问题。 :gift::gift::gift: 号外号外,送你九年编程经验!推荐 JAVA核心...
  • EBS环境最简单配置也包括两个服务器,这两个服务器也就是我们熟知的两层:数据库层,和中间层,也叫应用层。数据库层就如字面的意思,就是应用程序的后端数据库。中间层就类似Application Server(应用程序服务器)...

空空如也

空空如也

1 2 3 4 5 6
收藏数 118
精华内容 47
关键字:

两点之间包括这两点吗