Lambda使用
private static void () {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程");
}
}).start();
// ()参数列表 ->连接符 {方法体} 经常在匿名对象
new Thread(()->{
System.out.println("Lambda线程");
}).start();
}
public interface IPerson {
public void eat();
}
private static void testPerson(IPerson p) {
p.eat();
}
testPerson(new IPerson() {
@Override
public void eat() {
System.out.println(" 普通");
}
});
testPerson(()->{
System.out.println("我是Lambda");
});
带参数和返回值测试
public interface IPerson2 {
public int eat(String food);
}
testPerson2(new IPerson2() {
@Override
public int eat(String food) {
return 0;
}
});
testPerson2((String name)->{
return 2;
});
接口比较例子
public class Person {
private String name;
private int age;
public Person() {
System.out.println(" create Person");
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void doSomethings() {
System.out.println(name);
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
List<Person> persons =new ArrayList<Person>();
persons.add(new Person("zhangsan",18));
persons.add(new Person("zhangsan2",30));
persons.add(new Person("zhangsan3",20));
for (Person person : persons) {
System.out.println(person);
}
Collections.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
});
Collections.sort(persons, (Person o1, Person o2)->{
return o1.getAge()-o2.getAge();
}
);
for (Person person : persons) {
System.out.println(person);
}
为了更加简化,省略模式
1 小括号参数类型可以省略
2 小括号只有一个参数,括号可以省略
3 大括号如果只有一句话,大括号也可以省掉, retrun 分号的省略问题
new Thread(()->{
System.out.println("Lambda线程");
}).start();
new Thread(()->
System.out.println("Lambda线程")
).start();
testPerson2((String name)->{
return 2;
});
testPerson2(name->
2
);
Collections.sort(persons, (Person o1, Person o2)->{
return o1.getAge()-o2.getAge();
}
);
Collections.sort(persons, (o1, o2)->
o1.getAge()-o2.getAge()
);
for (Person person : persons) {
System.out.println(person);
}
persons.forEach((Person person)->{
System.out.println(person);
});
persons.forEach(d->
System.out.println(d)
);
接口定义限制
@FunctionalInterface 保证接口只有一个方法
stream用法
针对list集合使用
主要用于去重、取单个属性、过滤、组合
集合应用
https://www.cnblogs.com/yinjing/p/11005823.html
1、去重
List<String> list;
list= list.stream().distinct().collect(Collectors.toList());
2、抽取对象中所有的id的集合
List<User> list;
List<String> idList = list.stream().map(User::getId).collect(Collectors.toList());
3、filter (where 条件)
list.stream().filter(item->item.getIsDelete().equals(1)).collect(Collectors.toList());
nginx
作用:代理和负载均衡
集群和分布式的区别?
集群不涉及服务之间的相互访问,分布式涉及服务之间的通信及相互访问;
nginx用来做集群,dubbo和springcloub用来做分布式;
nginx重启
service nginx restart
集群部署
cd /root/renren
nohup java -jar renren-fast.jar --server.port=8082>log1.txt &
nohup java -jar renren-fast.jar --server.port=8083>log2.txt &
nohup java -jar renren-fast.jar>log3.txt &
/ect/nginx/nginx.conf
upstream tomcatserver {
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8083 weight=1;
}
server {
listen 8091;
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcatserver;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
nginx 重启
nginx -s reload
集群和分布式区别
集群不涉及 服务之间通信
dubbo
服务端
@Service(interfaceClass = ComputeService.class, version= “1.0.0”) 开发
消费端
@Reference(version=“1.0.0”,check=false)
ComputeService
xml
dubbo简化的是tcp 协议通信
https://blog.csdn.net/h2677lucy/article/details/79590979
springcloud
什么不用做,集成注册中心就可以,本身就是http server (tomcat)
服务之间调用 走http协议
@FeignClient(“schedule-service”)
对外访问 gateway (网关)
springcloud其他中间件还能多
springcloud还有个类似nginx中间件 网关 压测直接访问网关http地址就可以
nginx面试问题
nginx如何使用的?
首先nginx可以做代理,前端使用vue结合elementUI,部署时使用npm run build命令打包成dist文件拷贝到linux上。
后端打包成.jar文件拷贝到linux上,启动后台接口服务java xxx.jar。
配置nginx.conf文件,修改配置信息,把访问路径修改到dist路径一致,开放一个端口号,启动nginx,nginx代理就部署好了。
其次nginx可以做集群,负载均衡,把后台服务部署在几台机器上,然后启动服务。
修改nginx.conf配置文件,把几台机器的IP和端口号配置到配置文件信息中,nginx开放一个端口号,然后访问的服务会默认分发到几台机器上。
负载均衡的策略:默认轮询、权重、最少连接数、IP地址哈希(解决session问题,同一客户连续的web请求都会被分发到同一服务器进行处理)
微服务压测
压测dubbo步骤
思路:结合jmeter,对jemter做二次开发,然后jemter 走java协议,调用自定义类
打包后把zip包解压,把解压的.jar包拷贝到jmeter->lib->ext下,重启jmeter
执行jmeter,依赖的dubbo.inf注册中心包,和服务项目需要开启
具体细节
<!-- java jmeter依赖jar包 -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.2.1</version>
</dependency>
如何开发
利用面向对象特性,继承父类(注解),然后打包到jmeter ext目录
/**
* 支持jmeter
*/
public class JmeDubboAction extends AbstractJavaSamplerClient{}
大数据之hdfs
链接:https://pan.baidu.com/s/1wydlinKEzHcbmTJbqM_ldg
提取码:xcsw
账号 root/cloudera
• top -c
• netstat -ntlp
大数据核心解决问题 分布式计算,分布式存储
开源框架 hadoop
HDFD提供自动备份功能
HDFS案例
基础命令
https://blog.csdn.net/foreverling/article/details/79749277
dfs -mkdir /home
区别
hdfs dfs -ls /
ls /
//将本地文件上传到 HDFS 中,前面为服务器中文件路径,后面为 HDFS 中文件路径
hdfs dfs -put /root/mytest.txt /mytest
查看上传问题
hdfs dfs -ls /mytest
打印问题
hdfs dfs -cat /mytest/test.txt
大数据之hbase
进入到 hbase 命令行 key-value 数据库 hdfs
Reids 内存数据库
hbase shell
查看有哪些表
list
创建 hbase 表 (列族 key)
列族 key-value
json
create ‘member’,‘member_id’,‘address’,‘info’
使用
put ‘member’,‘scutshuxue’,‘info:age’,‘24’
put ‘member’,‘scutshuxue’,‘info:birthday’,‘1987-06-17’
put ‘member’,‘scutshuxue’,‘info:company’,‘alibaba’
put ‘member’,‘scutshuxue’,‘address:contry’,‘china’
put ‘member’,‘scutshuxue’,‘address:province’,‘zhejiang’
put ‘member’,‘scutshuxue’,‘address:city’,‘hangzhou’
put’member’,‘xiaofeng’,‘info:birthday’,‘1987-4-17’
put’member’,‘xiaofeng’,‘info:favorite’,‘movie’
put’member’,‘xiaofeng’,‘info:company’,‘alibaba’
put’member’,‘xiaofeng’,‘address:contry’,‘china’
put’member’,‘xiaofeng’,‘address:province’,‘guangdong’
put’member’,‘xiaofeng’,‘address:city’,‘jieyang’
put’member’,‘xiaofeng’,‘address:town’,‘xianqiao’
get ‘member’,‘scutshuxue’
get ‘member’,‘scutshuxue’,‘info’
get ‘member’,‘scutshuxue’,‘info:age’
修改
put ‘member’,‘scutshuxue’,‘info:age’ ,‘99’
删除
delete ‘member’,‘scutshuxue’,‘info:age’
查看表信息
describe ‘member’
删表结构alter ‘member’,{NAME=>‘member_id’,METHOD=>‘delete’}
禁用表
disable ‘member’
删表
drop ‘member’
count ‘member’
大数据之hive
hive --service cli
查看数据库
show databases;
创建数据库
create database testfan;
切换数据库
use testfan;
删除数据库
DROP DATABASE IF EXISTS testfan
CASCADE
创建表 类数据库
创建一个外部表,表有字段 name,sex,score。comment 后面内容为字段描述信息。
create external table if not exists studenttable(
name string comment ‘name value’,
sex string comment ‘sex value’,
score string comment ‘score value’)
row format delimited
fields terminated by ‘\t’
lines terminated by ‘\n’
stored as textfile;
show tables;
desc studenttable;
drop table studenttable;
加载 hdfs 到 hive 中
load data inpath ‘/mytest/mytest.txt’ overwrite into table studenttable;
加载本地数据到 hive 中
load data local inpath ‘/root/mytest.txt’ overwrite into table studenttable;
(overwrite 覆盖以前数据)
支持 sql 关系型数据
select count(*) from studenttable;
select avg(score) from studenttable;
大数据之分布式计算Impala
Impala 相比于hive,最大特点就是它的快速。
impala-shell
https://blog.csdn.net/liuxiangke0210/article/details/50439844/ 独立导 入
同步 hive 到 impala
INVALIDATE METADATA ;
其他操作和数据库一样
show databases;
use testfan;
强类型
select avg(cast(score as DOUBLE)) from studenttable;
对比 hive
大数据平台spark
spark-shell
读取 hdfs
var lines = sc.textFile("/mytest/mytest.txt")
读取本地
var lines = sc.textFile(“file:///root/mytest.txt”)
sql
lines.count()
lines.first()
DAG
大数据工程师
https://www.bjsxt.com/down/3177.html
https://blog.csdn.net/huoyongliang/article/details/87921977
Map reduece
Impala