Day20(lambda、stream、微服务、大数据、nginx)

16 篇文章 0 订阅
5 篇文章 0 订阅

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

作用:代理和负载均衡

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4pfd1UUn-1587392945734)(C:\Users\wys\AppData\Roaming\Typora\typora-user-images\image-20200420105946154.png)]

集群和分布式的区别?

集群不涉及服务之间的相互访问,分布式涉及服务之间的通信及相互访问;

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值