觉得有用的知识点

java常用的库?
http://blog.csdn.net/basycia/article/details/50769838

集合框架 HashMap 的扩容机制

ConcurrnetHashMap 的原理?
ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求
ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,final,CAS等lock-free技术来减少锁竞争对于性能的影响


Java的垃圾回收机制?

垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。

堆区分为三个区:

年轻代(Young Generation)(由一个Eden区和俩个survivor区组成)
年老代(Old Generation)
永久代(Permanent Generation,也就是方法区)。
年轻代:新创建的对象都在年轻代的Eden区,经过一次JC收集后,存活下来的会被复制到survivor区(一个满了,就全部移动到另外一个大的中,但要保证其中一个survivor为空),经过多次JC后,还存活的对象就被移到老年代了。

年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收。

溢出原因有循环上万次的字符串处理、创建上千万个对象、在一段代码内申请上百M甚至上G的内存。
永久代:存储的是final常量,static变量,常量池。

持久代溢出原因 动态加载了大量Java类而导致溢出

设计模式?
模式是一条由三个部分组成的通用规则:它表示了一个特定环境、一类问题和一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。

软件设计模式的分类?
创建型

创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。创建型模式主要有简单工厂模式(并不是23种设计模式之一)、工厂方法、抽象工厂模式、单例模式、生成器模式和原型模式。

结构型

用于帮助将多个对象组织成更大的结构。结构型模式主要有适配器模式adapter、桥接模式bridge、组合器模式component、装饰器模式decorator、门面模式、亨元模式flyweight和代理模式proxy。

行为型

用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。行为型模式主要有命令模式command、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式state、策略模式、模板模式和访问者模式

设计模式的六大原则?
单一职责:一个类,或者一个接口,最好只做一件事情,当发生变化时,他只能受到单一的影响;因为职责过多,可能引起变化的原因将会很多,这样导致职责和功能上的依赖,将严重影响其内聚性和耦合度,混乱由此而生。
里氏替换:在使用基类的的地方可以任意使用其子类,能保证子类完美替换基类;这一精神其实是对继承机制约束规范的体现
接口隔离:尽量使用多个专门的单一的小接口,避免庞大的总接口
迪米特法则也叫最少知识原则
开闭原则:开放封闭原则,简称开闭原则.
依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。其核心思想是:依赖于抽象。

关于设计模式看了哪些书?书名是什么?
设计模式之禅 《大话设计模式》和《Head First 设计模式》

osgi(开放服务网关协议)框架:
目前基于OSGi的框架大概有4个:Knopflerfish, Apache Felix, Equinox, Spring DM

JVM调优工具
Jconsole,jProfile,VisualVM

数据库中主键的设计原则
主键在物理层面上只有两个用途:
1.唯一的标识一行.
2.作为一个可以被外键有效引用的对象.

1.主键应当是对用户没有意义的.
2.主键应该是单列的,以便提高连接和筛选操作的效率.
3.永远不要更新主键
4.主键不应当包含动态变化的数据,如时间戳,穿件时间列,修改时间列等.
5.主键应当是计算机自动生成.

Tomcat和JBoss都是服务器,有什么区别呢?

JBoss和tomcat是不一样,JBoss是一个可伸缩的服务器平台,当你的EJB程序编制完成后,如果访问量增加,只要通过增加服务器硬件就可以实现多台服务器同时运算,提高了负载容量,这个性能容量理论上是没有限制的,理论上无最大支持在线人数的上限,对于JBoss/EJB这样的平台来说,无最大访问量限制一说。

序列化?
所谓序列化其实就是将程序中的数据(对象)通过某种方式,保存到本地中。然后把Java对象转换为字节序列的过程称为对象的序列化

就像你寄一箱饼干,因为体积太大,就全压成粉末紧紧地一包寄出去,这就是序列化的作用。
只不过java的序列化是可以完全还原的.

什么情况下需要序列化

a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;

http 协议,返回码,301 与 302 区别
301 redirect: 301 代表永久性转移(Permanently Moved)
302 redirect: 302 代表暂时性转移(Temporarily Moved )

为什么要使用并发(多线程)编程?

单线程是先理发再陪女朋友购物,先后顺序进行.
多线程是吃了分身药A身去理发B身去陪女朋友
多线程处理就会提升性能,在相同的时间里做更多的事情,服务更多的客户。


Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。


数据库的三大范式?

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
1. 第一范式(确保每列保持原子性)
2.第二范式(确保表中的每列都和主键相关)
3.第三范式(确保每列都和主键列直接相关,而不是间接相关)


什么是队列?
队列是用于存储消息的数据结构.
类似于链表和堆栈,队列也是存储数据的结构.队列中数据进入队列的顺序很重要,一般来说,队列就是一群人或事物按照排好的顺序等待接受服务或者处理.

队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。


java中list与set的区别?
List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)


K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果


MapReduce:实现jion的几种方法
reduce side join 即:reduce阶段进行实际的连接操作
map side join
SemiJoin(半连接)

http状态返回代码 1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。
http状态返回代码 2xx (成功)
表示成功处理了请求的状态代码。
http状态返回代码 3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
http状态返回代码 4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理
http状态返回代码 5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。


kafka删除topicName 提示marked for deletion?
执行删除命令:kafka-topics.sh --delete --zookeeper localhost:2181 --topic yuhui-001
并没有真正删除,如果要真正删除.他只是标记删除了
在每一台机器中的kafka_2.10/config/server.properties 文件加入 delete.topic.enable=true


kafka
在流式计算中,Kafka一般用来缓存数据
Apache Kafka是一个开源消息系统,由Scala写成
Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。

Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。

无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性


JMS是什么?
JMS是什么:JMS是Java提供的一套技术规范

 

Kafka
Kafka是一个发布订阅系统,主要用作缓存。
核心概念
Kafka是一个集群,意味着有很多个节点组成。
Broker:节点名称。
message:就是一个一个的消息。
Message queue:消息队列,有一个一个消息组成。
Topic:就是主题,意思是一类消息。我们发送消息的时候,必须指明主题。
Partition:分区。就是把消息自定义为一个一个的分区,然后发送给不同的broker

Producer:生产者,发布消息。
Consumer:消费者,消费消息。
Offset;偏移量,就是行号。我们的这个消息队列保存在文件中,消息来了,追加到文件的尾部。文件有行号,就是我们的offset 偏移量。


Flume基本概念
Agent 一个Agent包含 source ,channel,sink 和其他组件。
Source Source 负责接收event或通过特殊机制产生event,并将events批量的放到一个或多个Channel
Channel Channel位于Source和Sink之间,用于缓存进来的event
Sink Sink负责将event传输到下一个source或最终目的地,成功后将event从channel移除
Client Client 是一个将原始log包装成events并且发送他们到一个或多个agent的实体,目的是从数据源系统中解耦Flume,在flume的拓扑结构中不是必须的。
Events Event是Flume数据传输的基本单元。可以是日志记录、 avro 对象等。

 

avro 数据序列化的系统
irc 网络即时聊天 Internet Relay Chat


sqoop数据迁移
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库

将导入或导出命令翻译成mapreduce程序来实现
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制

Sqoop的原理其实就是将导入导出命令转化为mapreduce程序来执行,sqoop在接收到命令后,都要生成mapreduce程序

使用sqoop的代码生成工具可以方便查看到sqoop所生成的java代码,并可在此基础之上进行深入定制开发


GraphX是一个基于Spark的分布式图计算子框架,提供了图计算中用于图和图并行计算的接口。


属性图:是一个有向多重图,用于表示具有点和边的用户定义对象。 具备RDD的3个关键特性:Immutable(不变性)、Distributed(分布式)和Fault-Tolerant(容错)。 包括带属性的顶点和边,这些属性是用来描述顶点和边的特征。


一般图的分布式存储有边分割和点分割两种方式。

GraphX 提供系列图算法来简化任务的分析,主要有:
网页排名:
连通分支图算法:
三角形计数法:


机器学习的定义有以下几种描述: 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。 机器学习是对能通过经验自动改进的计算机算法的研究。 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。 机器学习强调三个关键词:算法、经验、性能。


机器学习的分类有以下四种:

监督学习:
半监督学习:
无监督学习:
强化学习:

 

MLlib目前支持的分类学习问题的算法有: 逻辑回归( Logistic Regression ) 线性支持向量机( linear SVMs,Support Vector Machine) 朴素贝叶斯( naive Bayes) 决策树( decision trees) 随机森林( random forests ) 梯度提升决策树(gradient-boosted trees)


MLlib目前支持的回归算法有: 线性最小二乘法(linear least squares) 套索(Lasso) 岭回归( ridge regression) 决策树( decision trees), 随机森林( random forests ) 梯度提升决策树(gradient-boosted trees) 保序回归( Isotonic regression)


比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。

访问控制列表(ACL)

静态ip:固定IP(即静态IP):固定IP地址是长期固定分配给一台计算机使用的IP地址,一般是特殊的服务器才拥有固定IP地址。 一般来说,采用专线上网的计算机才拥有固定的 Internet IP 地址而且需要比较昂贵的费用。

 

对称多处理"(Symmetrical Multi-Processing)简称SMP,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。它是相对非对称多处理技术而言的、应用十分广泛的并行技术。

 

 

 


Docker:
Docker是一个开源的应用容器引擎,让开着可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口.

什么叫虚拟化?
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

什么叫沙箱?
Sandboxie(又叫沙箱、沙盘)即是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。其为一个独立的虚拟环境,可用以测试不受信任的应用程序或上网行为。

什么叫注册表?
注册表(Registry,繁体中文版Windows操作系统称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。
注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。

什么是Ribbon?
Ribbon即功能区
出处 微软
内容 收藏命令按钮和图示

双字(REG_DWORD):
从字面上理解应该是Double Word,双字节值。由1-8个十六进制数据组成,我们以十六进制的方式来编辑。如:D1234567。

什么是反安装?
就是卸载......

高斯模糊
高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪声以及降低细节层次。

什么是Aero?
Windows Aero 是从 Windows Vista 开始使用的新型用户界面,透明玻璃感让用户一眼贯穿。
“Aero”为四个英文单字的首字母缩略字:Authentic(真实)、Energetic(动感)、Reflective(反射)及Open(开阔)。

ClearType?
屏幕字体平滑工具 让色调进行微妙调整 可提高文字的清晰度

 

DirectX?
DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发,并且只能支持这些平台。最新版本为DirectX 12,创建在最新的Windows10。


长连接和短连接
长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。

短连接是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。

数据包
短连接是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。

 


机器学习
机器学习的主体是计算机
机器学习是从以往的历史数据来对将来做的决策


机器学习的典型应用
购物篮分析
关联规则 , 啤酒+尿片
典型应用,聚类 用户细分精准营销
朴素贝叶斯 案例:垃圾邮件识别
决策树 信用卡欺诈 风险识别
ctr(点击率)预估 互联网广告
系统过滤 推荐系统 经常购买的东西

 

自然语言处理:是比机器学习又上升一个高度
情感分析

实体识别


深度学习
图像识别
语音识别
人脸识别

机器学习和数据分析的区别
交易数据
跟钱打交道的
行为数据

事物:要么同时成功要么同时失败

nosql数据库

解决业务问题不同
数据分析是报告过去的事情
机器学习是预测未来的事情

技术手段不同

 


内省和反射
什么是内省?
通过反射的方式操作JavaBean的属性,jdk提供了PropertyDescription类来操作访问JavaBean的属性,Beantils工具基于此来实现。

 

大O符号

大O 就是 时间复杂度。
时间复杂度是大概的描述一个算法的用时(实际上从侧面的表达了他的效率)
你可以 把它 看成函数 y = f(x)一样。
O(n)中的n 代表 规模大小,这也表明了,时间复杂度 跟 规模的关系。
最好时间复杂度,通常指在最好情形下,这个算法用时。反之,最坏情况下的就是最坏时间复杂度。
通常 冒泡算法 的最坏时间复杂度就是O(2^n),最坏情形是原序列 跟 排序后的序列完全相反。


析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)

 

serial(串行) throughput(吞吐量)


串行GC:整个扫描和复制过程均采用单线程的方式,相对于吞吐量GC来说简单;适合于单CPU、客户端级别。
吞吐量GC:采用多线程的方式来完成垃圾收集;适合于吞吐量要求较高的场合,比较适合中等和大规模的应用程序。

 

hbase的rowkey怎么创建好?列 族怎 么创建比较好?

hbase存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)一个列族在数据底层是一个文件,所以将经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间


blob(二进制大对象)
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。
在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。
BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。

 

Top K算法

 

多线程
如果调用run()方法,则结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互交替运行.在jdk的文档中可以发现,一旦调用start()方法,则会通过jvm找到run()方法.

如果调用start()方法则程序可以正常完成交互式运行.
为什么呢?

在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thre ad中的start()方法的定义,可以发现此方法中使用了priv ate native void start0();其中native关键字表示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java Native Interface)(本地接口)

 

在实际开发中很少使用Thread类一般都是事先runable接口.

在程序开发中只要是多线程肯定永远以实现Runn able接口为主,因为实现Runn able接口相比继承Thre ad类有如下好处:避免点继承的局限,一个类可以继承多个接口。
适合与资源的共享.


如果要存储海量的小文件(大小都是几百k-几兆)请简述自己的方案

1.将小文件打成har文件存储
2.将小文件序列化到HDFS中


时间复杂度
通常用大O来表示
常数阶 对数阶 线性阶

 


持久化

持久化就是将程序数据在持久状态和瞬时状态间转换的机制.
通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)
持久化为持久数据(比如持久化至数据库中,能够长久保存).

OID:对象标识符(Object Identifier Desendant)


URI(统一资源标识符)
URL:统一资源定位符
类似于:www.baidu.com
URI:
通常由三个部分组成:
类似于:http://www.why.com.cn/myhtml/html1223/


在Python中,我们使用urllib2这个组件来抓取网页

 


联机分析技术(OLAP)
联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。


impala类比于hive

 

hue(Hadoop User Experience)
意思就是Hadoop的用户体验


PROM (Programmable Read-Only Memory)
-可编程只读存储器,也叫One-Time Programmable (OTP)ROM“一次可编程只读存储器”,是一种可以用程序操作的只读内存。最主要特征是只允许数据写入一次,如果数据烧入错误只能报废。

 


rac(Real Application Cluster)


什么是分布式系统
利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式文件系统.

 


mybatis学习
案例:公众号和短信自动回复
jsp
jstl
el
js/jquery
servlet
javabean

 

struts2
Struts1 2001
Struts2 2007

 

 

posted @ 2018-01-31 15:31  王振龙  阅读(181)  评论(0编辑  收藏  举报
Live2D