offset与limit方法
全表扫描
,如果数据量大,效率慢。
例如OFFSET 是 8 千万,那么它需要获取所有这些记录 (包括那么多根本不需要的数据),将它们放入内存,然后获取 LIMIT 指定的 10 条结果
1 | select * from table_name limit 10 offset 8000001; |
基于游标
因为通过显式告知数据库最新行,数据库就确切地知道从哪里开始搜索(基于有效的索引),而不需要考虑目标范围之外的记录。
这些题目百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目,熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
java中==和equals和hashCode的区别
int、char、long各占多少字节数
int与integer的区别
谈谈对java多态的理解
String、StringBuffer、StringBuilder区别
什么是内部类?内部类的作用
抽象类和接口区别
抽象类的意义
抽象类与接口的应用场景
抽象类是否可以没有方法和属性?
接口的意义
泛型中extends和super的区别
父类的静态方法能否被子类重写
进程和线程的区别
final,finally,finalize的区别
序列化的方式
Serializable 和Parcelable 的区别
静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
静态内部类的设计意图
成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
谈谈对kotlin的理解
闭包和局部内部类的区别
string 转换成 integer的方式及原理
哪些情况下的对象会被垃圾回收机制处理掉?
讲一下常见编码方式?
utf-8编码中的中文占几个字节;int型几个字节?
静态代理和动态代理的区别,什么场景使用?
Java的异常体系
谈谈你对解析与分派的认识。
修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?
Java中实现多态的机制是什么?
如何将一个Java对象序列化到文件里?
说说你对Java反射的理解
说说你对Java注解的理解
说说你对依赖注入的理解
说一下泛型原理,并举例说明
Java中String的了解
String为什么要设计成不可变的?
Object类的equal和hashCode方法重写,为什么?
常用数据结构简介
并发集合了解哪些?
列举java的集合以及集合之间的继承关系
集合类以及集合框架
容器类介绍以及之间的区别(容器类估计很多人没听这个词,Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections),具体的可以看看这篇博文 Java容器类)
List,Set,Map的区别
List和Map的实现方式以及存储方式
HashMap的实现原理
HashMap数据结构?
HashMap源码理解
HashMap如何put数据(从HashMap源码角度讲解)?
HashMap怎么手写实现?
ConcurrentHashMap的实现原理
ArrayMap和HashMap的对比
HashTable实现原理
TreeMap具体实现
HashMap和HashTable的区别
HashMap与HashSet的区别
HashSet与HashMap怎么判断集合元素重复?
集合Set实现Hash怎么防止碰撞
ArrayList和LinkedList的区别,以及应用场景
数组和链表的区别
二叉树的深度优先遍历和广度优先遍历的具体实现
堆的结构
堆和树的区别
堆和栈在内存中的区别是什么(解答提示:可以从数据结构方面以及实际实现方面两个方面去回答)?
什么是深拷贝和浅拷贝
手写链表逆序代码
讲一下对树,B+树的理解
讲一下对图的理解
判断单链表成环与否?
链表翻转(即:翻转一个单项链表)
合并多个单有序链表(假设都是递增的)
开启线程的三种方式?
线程和进程的区别?
为什么要有线程,而不是仅仅用进程?
run()和start()方法区别
如何控制某个方法允许并发访问线程的个数?
在Java中wait和seelp方法的不同;
谈谈wait/notify关键字的理解
什么导致线程阻塞?
线程如何关闭?
讲一下java中的同步的方法
数据一致性如何保证?
如何保证线程安全?
如何实现线程同步?
两个进程同时要求写或者读,能不能实现?如何防止进程的同步?
线程间操作List
Java中对象的生命周期
Synchronized用法
synchronize的原理
谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解
static synchronized 方法的多线程访问和作用
同一个类里面两个synchronized方法,两个线程同时访问的问题
volatile的原理
谈谈volatile关键字的用法
谈谈volatile关键字的作用
谈谈NIO的理解
synchronized 和volatile 关键字的区别
synchronized与Lock的区别
ReentrantLock 、synchronized和volatile比较
ReentrantLock的内部实现
lock原理
死锁的四个必要条件?
怎么避免死锁?
对象锁和类锁是否会互相影响?
什么是线程池,如何使用?
Java的并发、多线程、线程模型
谈谈对多线程的理解
多线程有什么要注意的问题?
谈谈你对并发编程的理解并举例说明
谈谈你对多线程同步机制的理解?
如何保证多线程读写文件的安全?
多线程断点续传原理
断点续传的实现
https://www.elastic.co/products/elasticsearch
https://github.com/elastic/elasticsearch
执行bin文件夹中的elasticsearch.bat ,查看 http://localhost:9200
https://github.com/medcl/elasticsearch-analysis-ik/releases
ElasticSearch中最重要原理是文档的索引
和文档的读取
ElasticSearch 是一个分布式
、高扩展
、高实时
的搜索与数据分析引擎
。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用ElasticSearch的水平伸缩性,能使数据在生产环境变得更有价值。ElasticSearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elastic Search 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。
Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。
Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。”Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。“相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。
Elasticsearch使用Lucene,并试图通过JSON和Java API提供其所有特性。它支持facetting和percolating,如果新文档与注册查询匹配,这对于通知非常有用。另一个特性称为“网关”,处理索引的长期持久性;例如,在服务器崩溃的情况下,可以从网关恢复索引。Elasticsearch支持实时GET
请求,适合作为NoSQL数据存储,但缺少分布式事务
。
Lucene[‘lusen]
1 | 必须安装带devel版本(完整jdk) |
1 |
|
修改/etc/sysconfig/network-scripts/ifcfg-ens33 文件
1 | BOOTPROTO=static |
1 | route -n |
有一个线程不断去轮询多个socket的状态,只有当socket真正有读写事件时,才真正调用实际的IO读写操作
另外多路复用IO为何比非阻塞IO模型的效率高是因为在非阻塞IO中,不断地询问socket状态时通过用户线程去进行的,
而在多路复用IO中,轮询每个socket状态是内核在进行的,这个效率要比用户线程要高的多
当用户线程发起IO请求,会给对应的socket注册一个信号函数,然后用户线程会继续执行,当内核数据就绪时会发送一个信号给用户线程,用户线程接收到信号之后,便在信号函数中调用IO读写操作来进行实际的IO请求操作
最理想的IO模型,用户发起IO请求,内核会立刻返回成功标志,等数据拷贝到用户线程,内核发信号给用户线程表示READ操作完成