| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 网易(杭州研究所)初面 -> 正文阅读 |
|
[大数据]网易(杭州研究所)初面 |
覆盖索引如何实现索引覆盖? t(id PK, name KEY, sex, flag); 画外音:id是聚集索引,name是普通索引。 表中有四条记录: 1, shenjian, m, A 3, zhangsan, m, A 5, lisi, m, A 9, wangwu, f, B 通常情况下,需要扫描两遍索引树。 例如: select * from t where name=‘lisi’; 是如何执行的呢? (1)先通过普通索引定位到主键值id=5; (2)在通过聚集索引定位到行记录; 这就是所谓的 当发起一个被索引覆盖的查询(也叫作索引覆盖查询)时,在EXPLAIN的Extra列可以看到“Using index”的信息 如何实现索引覆盖? 能够命中name索引,索引叶子节点存储了主键id,但sex字段必须回表查询才能获取到,不符合索引覆盖,需要再次通过id值扫码聚集索引获取sex字段,效率会降低。 参考:https://www.jianshu.com/p/8991cbca3854 ping实现以及对应协议ping是定位网络通不通的一个重要手段,是用来探测本机与网络中另一台主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。 ping命令是基于ICMP协议来工作的,ping命令会发送一份ICMP回显请求报文给目标主机,并等待目标主机返回ICMP回显应达,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机间是连通的。
参考:https://www.cnblogs.com/mgd666/p/14389922.html 为什么要有Time-wait状态(2MSL)主动关闭的Socket端会进入TIME_WAIT状态,并且持报文段最大生存时间续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。
2)允许老的重复分节在网络中消逝 参考:https://blog.csdn.net/tennysonsky/article/details/48680197 TIMESTAMP和DATETIME的区别以及选择
答:协调世界时,又称世界统一时间,世界标准时间,国际协调时间,简称UTC
答:int类型占用4字节,datetime占用8字节,timestamp占用4字节;通常情况下在选择表中列的数据类型时我们要选择能满足存储需要的,最小的数据类型,在使用MySQL数据库时有很多常见的误解,其中使用int类型来保存日期数据会提高数据读取的效率就是比较常见的一个误解。显然INT要比datetime类型小很多,同时MySQL又提供了两个非常好用的函数FROM_UNIXTIME() 和UNIX_TIMESTAMP(),使用这两个函数可以方便的在INT和DATETIME类型之间进行转换,但是使用INT类型存储时间也给我们带来了不少的麻烦: 1.数据的可读性比较差,我们在查看数据时不能直观的看出时间列中记录的一串整数所代表的时间 由以上特点可以知道,timestamp存储占用的空间和INT类型相同,实际上timestamp类型的数据在存储时就是被保存成INT类型的数据来存储的,这和我们使用INT来存储日期时间数据可以说是完全一样的。由于同样是使用INT类型来保存数据,所以和INT类型一样其存储的时间范围也是有限制的, 可见,使用timestamp来存储日期时间数据不但保证了数据类型的大小同INT类型一样,同时可以显示为日期时间格式,这在给我们使用数据带来了很多的方便。所以强烈建议大家,使用timestamp类型来存储日期数据而不要再使用INT类型了。(转自:https://www.imooc.com/article/16158) 四次挥手相对三次握手多一次?因为:客户端单方面无数据发送认为可以结束了,但是服务端不一定没有数据发送,所以服务端要将确信信息和自身发起断开分作两步 有了 IP 地址,为什么还要用 MAC 地址?有了 IP 地址,为什么还要用 MAC 地址? Ping发送一个ICMP(Internet Control Messages Protocol),即因特网信报控制协议;接收端回声消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答)。它的原理是:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,通过对方回复的数据包来确定两台网络机器是否连接相通,时延是多少。 进程间的通信
补充:线程间的通信方式 原文链接:https://blog.csdn.net/weixin_41903587/article/details/109529691 1.管理方式不同。栈由操作系统自动分配释放,不需要我们手动控制;堆的申请和释放工作由程序员控制,因此容易产生内存泄漏。 2.空间大小不同。栈的大小一般只有8~10M,而堆有几个G。 3.生长方向不同。栈的生长方向向下,内存的地址由高到低,堆的生长方向向上,内存的地址由低到高。 4.分配方式不同。堆时动态分配的;栈有两种分配方式:静态分配和动态分配。静态分配是由操作系统完成,比如局部变量的分配。动态分配由malloc函数进行分配,但是栈的动态分配和堆是不同的,栈的动态分配是由操作系统进行释放,不需要我们手动释放。 5.分配效率不同。栈由操作系统自动分配,会在硬件层级对栈提供支持。分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制比较复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈低得多。 由此可见,堆和栈相比,由于大量malloc()/free()或new/delete的使用,容易造成大量的内存碎片。栈相比于堆,在程序中应用较为广泛,最常见的函数调用过程由栈来实现,函数返回地址、实参和局部变量都采用栈的方式存放。虽然栈有众多的好处,但是和堆相比不是那么灵活,有时候分配大量的内存空间任然需要用堆。总之无论是堆还是栈,在内存使用时都要防止非法越界。 线程并行理解用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。 很多人都对其中的一些概念不够明确,如同步、并发等等,让我们先建立一个数据字典,以免产生误会。 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程 并行与并发: 并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。 并发与并行 同步:Java中的同步指的是通过人为的控制和调度,保证共享资源的多线程访问成为线程安全,来保证结果的准确。如上面的代码简单加入 多态
所谓 程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定 基本数据类型和应用数据类型Java中的数据类型分为两大类,基本数据类型和引用数据类型。 1、基本数据类型 例如,String类型就是引用类型。 二、基本数据类型和引用数据类型的区别 调用时为temp在栈中开辟新空间,并指向book的具体内容,方法执行完毕后temp在栈中的内存被释放掉 参考:https://www.cnblogs.com/maskwolf/p/9972982.html Java垃圾回收机制为什么要进行垃圾回收? 什么时候进行垃圾回收? 缺点:当两个对象A、B相互引用的时候,当其他所有的引用都消失之后,A和B还有一个相互引用,此时计数器各为1,而实际上这两个对象都已经没有额外的引用了,已经是垃圾了。但是却不会被回收 可达性分析算法 虚拟机栈中引用的对象(本地变量表)
引用的分类 强引用(Strong Reference) Object ojb = new Object(); 软引用(Soft Reference) Object obj = new Object(); SoftReference sf = new SoftReference(obj); obj =null; sf.get();//有时候会返回null 这时候sf是对obj的一个软引用,通过sf.get()方法可以取到这个对象,当然,当这个对象被标记为需要回收的对象时,则返回null; 弱引用(Weak Reference) Object obj = new Object(); WeakReference wf = new WeakReference(obj); obj =null; wf.get();//有时候会返回null wf.isEnQueued();//返回是否被垃圾回收器标记为即将回收的垃圾 弱引用是在第二次垃圾回收时回收,短时间内通过弱引用取对应的数据,可以取到,当执行过第二次垃圾回收时,将返回null。 虚引用(Phantom Reference) Object obj = new Object(); PhantomReference pf = new PhantomReference(obj); obj=null; pf.get();//永远返回null pf.isEnQueued();//返回从内存中已经删除 虚引用是每次垃圾回收的时候都会被回收,通过虚引用的get方法永远获取到的数据为null,因此也被成为幽灵引用。虚引用主要用于检测对象是否已经从内存中删除。 扩展:如果一个对象的引用有多个,怎么通过可达性确定回收周期呢?两个原则: 单条引用链上,由最弱的一个引用类型决定 原文链接:https://blog.csdn.net/w372426096/article/details/81360083 如何垃圾回收内存主要被分为三块,新生代、旧生代、持久代。三代的特点不同,造就了他们所用的GC算法不同,新生代适合那些生命周期较短,频繁创建及销毁的对象,旧生代适合生命周期相对较长的对象,持久代在Sun HotSpot中就是指方法区(有些JVM中根本就没有持久代这中说法)。首先介绍下新生代、旧生代、持久代的概念及特点:
旧生代:Old Generation。用于存放新生代中经过多次垃圾回收仍然存活的对象,例如缓存对象。旧生代占用大小为-Xmx值减去-Xmn对应的值。 持久代:Permanent Generation。在Sun的JVM中就是方法区的意思,尽管有些JVM大多没有这一代。主要存放常量及类的一些信息默认最小值为16MB,最大值为64MB,可通过-XX:PermSize及-XX:MaxPermSize来设置最小值和最大值。 常见的GC算法: 标记-清除算法(Mark-Sweep) 效率问题,标记和清除两个过程的效率都不高; 复制算法(Copying)
分代收集算法(Generational Collection) 其中,新生代又细分为三个区:Eden,From Survivor,ToSurviver,比例是8:1:1 4、老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用“标记—清理”或者“标记—整理”算法来进行回收。 分区算法 GC算法优劣标准 吞吐量(throughput)越高算法越好 停顿 垃圾回收器的任务是识别和回收垃圾对象进行内存清理,为了让垃圾回收器可以高效的执行,大部分情况下,会要求系统进入一个停顿的状态。停顿的目的是终止所有应用线程,只有这样系统才不会有新的垃圾产生,同时停顿保证了系统状态在某一个瞬间的一致性,也有益于更好地标记垃圾对象,因此垃圾回收时,都会产生应用程序的停顿 原文链接:https://blog.csdn.net/w372426096/article/details/81360083 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 5:19:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |