实习零散知识

本文来自于摘抄总结

1、@Override重写父类方法

如果想重写父类的方法,比如toString()方法的话,在方法前面加上@Override 系统可以帮你检查方法的正确性,
@Override
public String toString(){...}这是正确的
一旦写错 写成这样
@Override
public String tostring(){...}
编译器可以检测出这种写法是错误的 这样能保证你的确重写的方法正确
而如果不加@Override
public String tostring(){...}这样编译器是不会报错的 它只会认为这是你自己新加的一个方法而已

2、@Configuration

用@Configuration注解的类,等价于XML中配置beans

3、@Bean

用@Bean标注方法等价于XML中配置的bean

4、@Autowired进行自动注入

Spring通过@Autowired注解Bean的依赖注入,@Autowired注入式按照类型注入的,只要配置文件中的bean类型需要和bean类型是一致的,这时候注入就没有问题。但是如果相同类型的bean不止一个,此时注入就会出现问题,Spring容器就无法启动

5、@Resource按照bean的名字来进行注入

如果我们没有使用@Resource时指定bean的名字,同时Spring容器中又没有该名字的bean,这时候@Resource就会退化成@Autowired即按照类型注入,这样就有可能违背使用@Resource的初衷。所以建议在使用@Resource时都显示指定一下bean的名字@Resource(name="xxx")

6、@Primary优先选择

在Spring中使用注解,常使用@Autowired,默认是根据类型Type来自动注入的。但有些特殊情况,对同一个接口,可能有几种不同的实现类,而默认只采取其中一种的情况下@Primary的作用就出来了。

7、@Qualifier调整基于注解的字哦那个注入

在基于类型的自动注入中,若出现了多个实例Bean,@Primary是一个高效的方式来决定注入那个示例。若想在选择Bean的过程中拥有更多的控制,可以使用Spring的@Qualifier注解。可以在指定参数上使用@Qualifier,可以缩小类型匹配的范围,更容易找到指定的Bean.例如@Qualifier("main")。

8、@Transactional 

在Spring中@Tansactional提供一种控制事务管理的快捷手段。基于动态代理的机制,提供了一种透明的事务管理机制,方便的解决在开发中碰到的问题。

9、Spring Boot

Spring Boot 是 Spring 产品中一个新的子项目,致力于简便快捷地搭建基于 Spring 的独立可运行的应用。大多数的 Spring Boot 应用只需要非常少的 Spring 配置。

10、YAML语言

YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。

11、jetty

Jetty是一个提供HHTP服务器、HTTP客户端和javax.servlet容器的开源项目。

12、OAuth

OAuth 是一种分布式身份验证和授权的开放标准。它于 2006 年由 Twitter 和业务合作伙伴 Ma.gnolia 开发,用来方便地创建一些桌面小部件,这些小部件可以显示来自已身份验证服务的信息。您不再需要编写算法来执行强密码,或者处理忘记密码的问题,或者强制用户定期更改其密码。

13、Grails中的mvc

Grails 是一个遵循 MVC 设计模式的 Web 开发框架。它分别用 Domain Class、View、Controller 对应于 MVC 的模型、视图和控制器。可以简单的把一个 Domain Class 理解为数据库中的一张表,Grails 在底层通过 Hibernate 将 Domain Class 和数据库的表进行了映射。View 在 Grails 中指的是 GSP 页面(注意是 GSP 不是 JSP),它用于显示用户界面。GSP 与 JSP 类似,既可以编写静态网页的元素,也可以嵌入 Groovy 代码实现动态内容。Controller 在 Grails 中充当着重要的角色:它可以响应用户的请求,可以接收用户提交的表单,还可以访问模型的数据,并传递给 View。

14、Hibernate

工作原理:

(1)读取并解析配置文件 。
(2)读取并解析映射信息,创建SessionFactory。
(3)打开Session 。
(4)创建事务Transation 。
(5)持久化操作 。
(6)提交事务 。
(7)关闭Session 。
(8)关闭SesstionFactory 。

优势:

(1)对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
(2) Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,很大程度的简化DAO层的编码工作 。
(3)Hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
(4)Hibernate的性能非常好,因为它是个轻量级框架,映射的灵活性很出色,它支持各种关系数据库,从一对一到多对多的各种复杂关系。 

15、MVC

Controller截获用户通过鼠标或键盘发出的请求,然后改变Model的状态,Model通过Observer Synchronization(观察者模式)通知View自己的状态发生了变化。View查询Model展现数据。

16、从一台到另外一台服务器

ssh spiderdt@192.168.1.3

然后 docker ps显示哪些运行在docker上面

17、压缩和解压

压缩:

tar -cvf destination.tar.gz source 

destination.tar.gz为目标压缩文件

source为源文件或源文件夹

解压:

tar -xvf cache-api.tar.gz

18、重要命令记录

grails 

create-app cache-api 创建app
run-app -port=2222部署到2222端口
create-controller ApplicationController 创建controller
create-service PsqlService 创建service
create-domain-class cache 创建domain
For example the following command will create a script called src/main/scripts/hello-world.groovy:
grails create-script hello-world

grails create-app myapp --profile=rest-api 这样创建有基本的ApplicationController和UrlMapping存在基本代码

grails run-app 默认development环境
grails dev run-app 用development环境
grails prod run-app 用prod环境
grails test run-app 用test环境

输入 grails generate-all Trip,以构建一个 grails-app/controllers/TripController.groovy 类,并在 grails-app/views/Trip 中生成一组匹配的 Groovy Server Page(GSP)。

19、IntelliJ IDEA的优化导包设置路径

Settings | Editor | General | Auto Import and Optimize imports option in the Commit Project dialog.勾选后会自动删除不要的import

20、查看cpu和内存

cat /proc/cpuinfo 查看cpu

free -m 查看内存

21、grails删除

使用grails常见生成代码如上,生成是能生成,但是怎么删除呢?使用grails help查看发现也没有delete或者remove代码。
网上查了一下,没有自动删除的代码,只能手动删除,拿grails create-domain-class Race这一句为例,仅仅需要删除racetrack/test/unit/racetrack/RaceTests.groovy和racetrack/grails-app/domain/racetrack/Race.groovy

22、linux查看目录结构

tree命令

23、vi是vim的升级版

24、vi基本操作:

80 l 右移80

:40跳转到第40行

:set nu 显示行数

u 撤销

5dd 删除5行

一些常用命令案例:

1.删除指定的某些行

命令:(命令行命令模式)m,nd

释义:m是从第m行开始;n是从第n行开始;d是删除操作。之后回车即可。

例子:删除m到n之间的行数

step1:(命令行命令模式):m,nd——输入从第m行到当前位置的删除命令

step2:(命令行命令模式)回车——执行删除命令

2.复制指定的某些行

命令:(命令行命令模式):m,ny

释义:m是从第m行开始;n是从第n行开始;y是删除操作。之后回车即可。

例子:复制m到n之间的行数

step1:(命令行命令模式):m,ny——输入从第m行到当前位置的删除命令

step2:(命令行命令模式)回车——执行复制命令

3.选中指定的某些行

命令:(一般模式)mGVnG

释义:mG是从第m行开始;nG是直到第n行;V是进入可视模式。之后可以进行复制(y)、删除(d)操作。

例子1:选中m到n之间的行数

step1:(一般模式):mGVnG——输入从第m行到第n行选中

例子2:全选

step1:(一般模式):ggVG——全选选中

4. vim多行注释/删除注释
注释:ctrl+v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I,再插入注释符,比如"//",再按Esc,就会全部注释了。
删除:先按v,进入visual模式,横向选中列的个数(如"/ /"注释符号,需要选中两列),再按Esc,再按ctrl+v 进入列编辑模式,向下或向上移动光标,选中注释部分,然后按d, 就会删除注释符号。

5. 编程时自动补全成员

CTRL+N/P,n是向下找,p是向前找


24、切换

ssh 192.168.1.3

25、查看docker运行程序

docker ps

26、获取config里面application.yml的配置

//Retrieve property 'foo.bar.greeting' without specifying type (default is String), otherwise use value "Hello"
        def greeting = grailsApplication.config.getProperty('foo.bar.greeting', "Hello")

27、 @Value('${foo.bar.hello}')  

In Groovy code you must use single quotes around the string for the value of the Value annotation otherwise it is interpreted as a GString not a Spring expression.

28、委托(Delegate)

委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变

29、在这种情况下,我们使用 belongsTo 来设置Nose "属于" Face。结果是,我们创建一个Face并save 它,数据库将 级联 更新/插入 Nose:

class Face {
    Nose nose
}
class Nose {       
        static belongsTo = [face:Face]
}

30、grails持久化基础

Grails的底层使用 Hibernate 来进行持久化. 
本质上,Grails自动绑定Hibernate session到当前正在执行的请求上.这允许你像使用GORM的其他方法一样很自然地使用 save 和 delete 方法.

31、查看linux内存

free -m 和 top

32、grails:chaining

Actions can also be chained. Chaining allows the model to be retained from one action to the next. For example calling the first action in this action:

class ExampleChainController {

    def first() {
        chain(action: second, model: [one: 1])
    }

    def second () {
        chain(action: third, model: [two: 2])
    }

    def third() {
        [three: 3])
    }
}
33、grails:Binding To Collections And Maps
class Band {
    String name
    static hasMany = [albums: Album]
    List albums
}

class Album {
    String title
    Integer numberOfTracks
}
def bindingMap = [name: 'Genesis',
                  'albums[0]': [title: 'Foxtrot', numberOfTracks: 6],
                  'albums[1]': [title: 'Nursery Cryme', numberOfTracks: 7]]

def band = new Band(bindingMap)

assert band.name == 'Genesis'
assert band.albums.size() == 2
assert band.albums[0].title == 'Foxtrot'
assert band.albums[0].numberOfTracks == 6
assert band.albums[1].title == 'Nursery Cryme'
assert band.albums[1].numberOfTracks == 7

34、grails中5种不同的作用域

request - 仅在当前的请求中存储对象
flash - 仅在当前和下一请求中存储对象
flow - 在工作流中存储对象,当流到达结束状态,移出这些对象
conversation - 在会谈(conversation)中存储对象,包括根工作流和其下的子工作流
session - 在用户会话(session)中存储对象

35、Annotation:注解

 Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。
  更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的。
    Annontation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的声明语句中。

36、.$format

"/$controller/$action?/$id?(.$format)?"()
By adding the (.$format)? mapping you can access the file extension using the response.format property in a controller:

def index() {
    render "extension is ${response.format}"
}

37、groovy的单引号和双引号

使用单引号创建的字符串和使用双引号或正斜杠创建的字符串不同。前者是普通的java.lang.String,后者有些特殊,Groovy的开发者以他们奇怪的幽默感称其为GString,即Groovy字符串的简称。

38、groovy的正则

正斜杠有一个优势:不必对反斜杠进行转义。因此,/\d*\w*/与"\\d*\\w*"等价,但是更优雅。

=~执行RegEx部分匹配,只要至少有一个匹配,它就会返回true,而==~执行RegEx精确匹配。

39、内部迭代器和外部迭代器

内部迭代器更容易使用,我们不必控制迭代(list.each list.collect list.find list.findAll)。外部迭代器则更为灵活,我们可以更方便地控制迭代顺序、跳过元素、结束迭代或重新迭代等因素。

40、SOAP

SOAP(原为Simple Object Access Protocol的首字母缩写,即简单对象访问协议)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构信息。SOAP为了简化网页服务器(Web Server)从XML数据库中提取数据时,节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从XML格式执行资料互换,使其抽象于语言实现、平台和硬件。

41、psql

psql -f f就是file

42、URL和URI


43、MOP

元编程(metaprogramming)意味着编写能够操作程序的程序,包括操作程序自身。像Groovy这样的动态语言通过元对象协议(MetaObject Protocol,MOP)提供了这种能力。利用Groovy的MOP,创建类、编写单元测试和引入模拟对象都很容易。基于应用的当前状态,或基于应用所接受的输入,动态地添加方法和行为,代码会变得更灵活。

44、spring boot extends spring mvc extends spring
45、DSL
所谓领域专用语言(Domain Specific Language/DSL),其基本思想是“求专不求全”,不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言。
46、代理:设计模式
代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。
47、POJO和POGO

POJO(Plain Old Java Object)普通的Java对象,可以使用Java或JVM上的其他语言来创建

POGO(Plain Old Groovy Object)用Groovy编写的对象,扩展了java.lang.Object,同时也实现了groovy.lang.GroovyObject接口。

48、war

war:Web application Archive,与jar基本相同,但它通常表示这是一个Java的Web应用程序的包,tomcat这种Servlet容器会认出war包并自动部署。

49、RDD

resilient distributed dataset (RDD),Spark提供的主要抽象是弹性分布式数据集(RDD),这是一个包含诸多元素、被划分到不同节点上进行并行处理的数据集合。RDD通过打开HDFS(或其他hadoop支持的文件系统)上的一个文件、在驱动程序中打开一个已有的Scala集合或由其他RDD转换操作得到。用户可以要求Spark将RDD持久化到内存中,这样就可以有效地在并行操作中复用。另外,在节点发生错误时RDD可以自动恢复。

50、target目录

其中target目录是用来存放项目打包之后生成的文件的目录,图一中显示target目录下并没有文件,是因为我们还没有用maven对项目进行打包

51、presto

Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。
Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。
Presto支持在线数据查询,包括Hive, Cassandra, 关系数据库以及专有数据存储。 一条Presto查询可以将多个数据源的数据进行合并,可以跨越整个组织进行分析。
Presto以分析师的需求作为目标,他们期望响应时间小于1秒到几分钟。 Presto终结了数据分析的两难选择,要么使用速度快的昂贵的商业方案,要么使用消耗大量硬件的慢速的“免费”方案。

52、chronos

Apache Mesos把自己定位成一个数据中心操作系统,它能管理上万台的从机(slave)。Framework相当于这个操作系统的应用程序,每当应用程序需要执行,Framework就会在Mesos中选择一台有合适资源(cpu、内存等)的从机来运行。Chronos是Framework的一种,被Airbnb公司设计用来代替cron执行作业。

53、lein

本文不进一步讨论clojure,只简单介绍下使用lein进行clojure工程的构建,因为我个人对gradle很感兴趣(出于对groovy的好感)后续可能会再写一篇使用gradle的构建。

54.IDEA System.out.println 快捷输出


“abc”.sout  => System.out.println("abc");

55、build和compile的区别[编程语言]

 BUILD = COMPILE   +   LINK   =   RESULT   IS   EXE  
 COMPILE   =   COMPILE   =   RESULT   IS   DCU
不管这个说法对不对,但是build确实比compile做的要多啊,build付出的不亚于compile啊。
下面简单看下大家对这两个的区别的看法:
Build是从新编译所有和生成exe有关的文件,无论.pas文件是否修改过,它都会重新生成新的.dcu,并从新链接这些.dcu等等文件。   
Compile是编译修改过的文件,它只生成新修改过的.pas的相应的.dcu,并从新链接这些改变过的.dcu等等文件。

56、vi打开文件没退出

删除.swp文件

56、w命令

看有系统有哪些人在编辑

57、DAO

DAO(Data Access Object) 数据访问对象是第一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。

58、production和development的区别

1、php.ini-development 对应于 php.ini-dist,适合开发测试,如本地测试环境。
2、php.ini-production 对应于 php.ini-recommended 拥有较高的安全性设定,适合服务器上线运营当产品。

59、Thrift

Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。

60、Protocol Buffer

Protocol Buffer还有一个非常重要的优点就是可以保证同一消息报文新旧版本之间的兼容性。

61、Hive

公司的stg和ods:

stg保存最新的

ods保存所有

Hive拉链表:

拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。

Hive内部表和外部表:

Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。在删除表的时候,内部表的元数据和

数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

分区partition:

分区字段是一个虚拟的字段,本身并不包含在数据中,但是是从加载进来的数据中特别衍生出来的数据集。

元数据存储:

元数据默认使用Derby数据库保存在本地文件系统中,并保存在./metastore_db下。通过修改conf/hive-default.xml中的javax.jdo.option.ConnectionURL变量修改。

分区表Partition和桶表bucket_table:

分区表实际上是将原来在关系型数据库中的一个大表的数据分开来存储。桶表和分区表有类似的地方,都是将数据文件划分到不同的地方存储。不同的是,分区表是由

用户指定数据处处的位置。而桶表是根据数据表的某个字段去hash值,然后模桶的数量,最终放到其中一个桶中,但是最终放到哪一个桶中,用户是不知道的。

分隔符:

hive 默认的字段分隔符为ascii码的控制符\001,建表的时候用fields terminated by '\001',如果要测试的话,造数据在vi 打开文件里面,用ctrl+v然后再ctrl+a可以输入这个

控制符\001。按顺序,\002的输入方式为ctrl+v,ctrl+b。以此类推。

62、git pull = git fetch + git merge

63、docker特性

尽管从功能上看,Docker 和虚拟化技术致力于解决的问题都差不多,但是 Docker 却是采取了另一种非常不同的方式。虚拟机是虚拟出一套硬件,

虚拟机的系统进行的磁盘操作,其实都是在对虚拟出来的磁盘进行操作。当运行 CPU 密集型的任务时,是虚拟机把虚拟系统里的 CPU指令“翻译”

成宿主机的CPU指令并进行执行。两个磁盘层,两个处理器调度器,两个操作系统消耗的内存,所有虚拟出的这些都会带来相当多的性能损失,一

台虚拟机所消耗的硬件资源和对应的硬件相当,一台主机上跑太多的虚拟机之后就会过载。而 Docker 就没有这种顾虑。Docker 运行应用采取的是

“容器”的解决方案:使用 namespace 和 CGroup 进行资源限制,和宿主机共享内核,不虚拟磁盘,所有的容器磁盘操作其实都是对 /var/lib/docker/

的操作。简言之,Docker 其实只是在宿主机中运行了一个受到限制的应用程序。

64、idea中junit测试,点中service然后ctr+shift+t就建立了一个单元测试

65、数据库索引

A)聚集索引,表数据按照索引的顺序来存储的。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。
B)非聚集索引,表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,该层紧邻数据页,其行数量与数据表行数据量一致。
在一张表上只能创建一个聚集索引,因为真实数据的物理顺序只可能是一种。如果一张表没有聚集索引,那么它被称为“堆集”(Heap)。这样的表中的数据行没有特定的顺序,所有的新行将被添加的表的末尾位置。

66、后端加验证码

前端加验证码的话可以使用post暴力破解,后端加验证码至少post时需要使用图像识别技术

67、Secure & HttpOnly
Cookie的Secure属性,意味着保持Cookie通信只限于加密传输,指示浏览器仅仅在通过安全/加密连接才能使用该Cookie。如果一个Web服务器从一个非安全连接里设置了一个带有secure属性的Cookie,当Cookie被发送到客户端时,它仍然能通过中间人攻击来拦截。

Cookie的HttpOnly属性,指示浏览器不要在除HTTP(和 HTTPS)请求之外暴露Cookie。一个有HttpOnly属性的Cookie,不能通过非HTTP方式来访问,例如通过调用JavaScript(例如,引用 document.cookie),因此,不可能通过跨域脚本(一种非常普通的攻击技术)来偷走这种Cookie。尤其是Facebook 和 Google 正在广泛地使用HttpOnly属性。

68、psql使用

\l 查看数据库

\d 或 \dt 查看多表

\d table 查看表结构

\di 查看索引

68、二叉树的序列化和反序列化

序列化:二叉树 -> 字符串

反序列化: 字符串 -> 二叉树

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值