ARTS-6(加大激情的马力,来个华丽的转变)

Algorithm

leecode-119 杨辉三角 II
题目描述
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在这里插入图片描述
示例:

输入: 3
输出: [1,3,3,1]

解题思路
例如输入索引k = 3, 对应是第 3 + 1 = 4行,得出第4行共有4个值,且每个值为
第一个值为: 1
第二个值为: (n - 1) / 1 = (4 - 1) / 1 = 3
第三个值为: (n - 1) / 1 * (n -2) / 2 = (n - 1)(n - 2)/ (1 * 2) = (4-1)(4-2)/(12) = 3
第四个值为: (n - 1) / 1 * (n - 2) / 2 * (n-3)/3 = (n-1)(n-2)(n-3)/(123) =

  • (4-1)(4-2)(4-3)/(12*3) = 1
    由此得出规律:
    索引为n-1的行为n,且该行共有n个值(n > 1),得出第n行每个值为:
    后一个值等于前一个值然后乘以(n - i) / i
    即numVal = (n - i) / i * res.get(i - 1)
 public List<Integer> getRow(int rowIndex) {
 	List<Integer> res = new ArrayList<>(rowIndex + 1);
 	for (int index = 0; index < numRows; index++){
            if (index == 0){
                res.add(1);
            }else {
                long eachValOfRow = (long) res.get(index - 1) * (long) (numRows - index) / index;
                res.add((int) eachValOfRow);
            }
        }
        return res;
 }

Review

本周主要回顾下springboot项目中如何搭建两套kafka集群,因本周开发时候遇到需要监听其他项目的kafka消息,和自己的项目出现消费冲突,继而学习了kafka环境配置及多个集群的搭建。
第一步:新建其他项目kafka配置文件kafka.properties
第二步:定义第二个kafka的实现类

@Configuration
@PropertySource("classpath:kafka.properties")
//@EnableKafka
public class KafkaCarConsumerConfig {

    @Value("${kafka.consumer.servers}")
    private String servers;
    @Value("${kafka.consumer.enable.auto.commit}")
    private boolean enableAutoCommit;
    @Value("${kafka.consumer.session.timeout}")
    private String sessionTimeout;
    @Value("${kafka.consumer.auto.commit.interval}")
    private String autoCommitInterval;
    @Value("${kafka.consumer.group.id}")
    private String groupId;
    @Value("${kafka.consumer.auto.offset.reset}")
    private String autoOffsetReset;

    @Bean
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaCarListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerCarFactory());
        factory.getContainerProperties().setPollTimeout(1500);
        return factory;
    }

    public ConsumerFactory<String, String> consumerCarFactory() {
        return new DefaultKafkaConsumerFactory<>(consumerCarConfigs());
    }


    public Map<String, Object> consumerCarConfigs() {
        Map<String, Object> propsMap = new HashMap<>();
        propsMap.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, servers);
        propsMap.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, enableAutoCommit);
        propsMap.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, autoCommitInterval);
        propsMap.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, sessionTimeout);
        propsMap.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        propsMap.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        propsMap.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
        propsMap.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, autoOffsetReset);
        return propsMap;
    }

}

第三步:实现监听类(注意:containerFactory的值必须和第二步骤中的bean名称一致)

@KafkaListener(topics={"FTC-RESULT"},containerFactory="kafkaCarListenerContainerFactory")
public void consumer(ConsumerRecord<?,?> record){
//消息消费解析
}

方法二推荐通过
生产者工厂方法: producerFactory()
生产者KafkaTemplate :kafkaTemplate()

消费者的工厂方法:consumerFactory()
消费者的监听容器工厂方法: kafkaListenerContainerFactory()
链接

Tips

Jsch简介
JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,常用的有三种通道,即ChannelShell、ChannelExec、ChannelSftp,前两类用于执行命令(命令可以是shell语句,也可以是python xxx.py),后一种是用于上传下载文件。
使用步骤:

1、new一个JSch对象;

2、从JSch对象中获取Session,用于连接,并设置连接信息(根据SSH的连接原理,有两种方式,一是用户名+密码,二是用户名+privatekey+passphrase,第二种方式要在第1步设置,即jsch.addIdentity(xxx));

3、使用session对象调用opnChannel(“xxx”)打开通信信道,并连接;
4、使用不同的channel进行操作

这里介绍一个文件通过sftp上传下载的实现

public static void downloadSftp(String srcFile, String targetFile,Properties properties) throws JSchException, IOException {
	Jsch jsch = new Jsch();
	Session session = null;
	String sftpUser = properties.getProperty("config.sftp.user_load");
	String sftpPassword = properties.getProperty("config.sftp.password_load");
	        String sftpHost = properties.getProperty("config.sftp.host");
	        int sftpPort = Integer.parseInt(properties.getProperty("config.sftp.port"));
	try{
		session = jsch.getSession(sftpUser,sftpHost,sftpPort);
		session.setPassword(sftpPassword);
		sshConfig.put("StrictHostKeyChecking", "no");
       session.setConfig(sshConfig);
       session.setTimeout(30000);
       session.connect();
       ChannelSftp channel = (ChannelSftp)session.openChannel("sftp"); 
       channel.connect();
       new File(targetFile).getParentFile().mkdirs();
       new File(targetFile).createNewFile();
       channel.get(srcFile,new File(targetFile).getAbsolutePath());
       channel.get(srcFile,targetFile);
       channel.exit();    
	} catch(SftpException e){
		logger.error("download error! File:{} does not exist.",srcFile);
	}finally {
       if(session != null && session.isConnected()){
         session.disconnect();
       }
    }   
} 

我们在写 shell 脚本的时候通常会需要用 ssh 登录到远程服务器执行一些命令。
这个时候就懵逼了,我 ssh 直接执行过去了,怎么去应答这个询问啊。 这个时候就需要知道 ssh 有一个非交互方式登录 StrictHostKeyChecking

主机公钥确认 StrictHostKeyChecking
1、StrictHostKeyChecking=no 最不安全的级别,当然也没有那么多烦人的提示了,相对安全的内网测试时建议使用。如果连接server的key在本地不存在,那么就自动添加到文件中(默认是known_hosts),并且给出一个警告。
2、StrictHostKeyChecking=ask 默认的级别,就是出现刚才的提示了。如果连接和key不匹配,给出提示,并拒绝登录。
3、StrictHostKeyChecking=yes 最安全的级别,如果连接与key不匹配,就拒绝连接,不会提示详细信息。
JSch包实现SFTP上传、下载
JSch基本使用

Share

我好像从来没有给自己人生一个非常明确的定位,喜欢什么就去接触什么,自我介绍的时候我会说我喜欢新鲜的事物,我不抵触任何陌生的领域,因为我想去看到更全貌的世界。可至今26岁的我依然说不出自己未来是一个什么定位,我安慰自己说可能看到的东西还是不够,经历还是太少,但内心又告诉自己不该是这样的,比如说拍照这件事,摄影从我上大学开始进入我的生活,俗话说师姐领进门,修行在各人,从开始的新闻类摄影,追求的真实有故事有情节的画面,到后期开始自己玩摄影。那时候用自己奖学金买了第一台索尼微单,用到上半年因镜头问题无法感应传感器,这个过程一直在探索自己到底喜欢拍什么,也一直在思考自己对于摄影的兴趣到底有多深,可好像一直在我身上有个致命的缺点就是,无论对待什么都没有足够的激情,导致什么都喜欢却什么都不精,我喜欢可我投入的不够,我总是能认识到自己可改正起来却好像无比困难。近期巨款购入了一款索尼A7M3,想着希望借此来推动自己一把 ,加大激情的马力,试着让自己的摄影技术往另外一个阶段去上升,充分发挥出这款相机的价值,但摄影题材貌似依然还是不确定,那就去尝试好,工作之后貌似自己拖延症也在慢慢改变,不止工作上也希望自己的兴趣爱好上也能行动起来。
2020年已经进入到下半年了,我还是希望自己和他都能有所改变吧,和他一起努力成为更丰富更有能力的人。多看书多运动多拍照~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值