Arts打卡第5周
Algorithm。主要是为了编程训练和学习。 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。 进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。 关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 - 酷 壳 - CoolShell。
Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。 所以,需要你阅读并点评至少一篇英文技术文章, 我最喜欢去的地方是http://Medium.com(需要梯子) 以及各个公司的技术blog,如Netflix的。
Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。 学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识。
Share:主要是为了建立你的影响力,能够输出价值观。 分享一篇有观点和思考的技术文章。
Algorithm:
求两个数的交集:
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
- 我们可以不考虑输出结果的顺序。
进阶:
- 如果给定的数组已经排好序呢?你将如何优化你的算法?
- 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
- 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
long start = System.currentTimeMillis();
int len1=nums1.length;
int len2=nums2.length;
boolean[] bl=new boolean[len2];
ArrayList<Integer> al=new ArrayList<Integer>();
for(int i=0;i<len1;i++) {
for(int j=0;j<len2;j++) {
if(nums1[i]==nums2[j] && bl[j]==false) {
al.add(nums1[i]);
bl[j]=true;
break;
}
}
}
int[] in = new int[al.size()];
int e=0;
for(int i:al)
in[e++] = i; long end = System.currentTimeMillis();
System.out.println(end-start);
return in; }
}
知识点:Boolean b1 = new Boolean[5] 里面的元素默认都是false。
Review:https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-new-framework
这篇是spring react-core 的介绍,介绍了httpHandler webHandler exception filter 等。
Tip:BigDecimal 进行计算时,如果传入null会报空指针异常。因此可以在,字段类型的BigDecimal 字段 get 方法改写为,
return aaa == null ? new BigDecimal(0) :aaa; aaa 是自己定义的一个字段,这样从数据库接收不到值时,就会返回0,而不是null。
BigDecimal 类型的数字去负数可以调用它的 negate()方法。
Share:
上面是 Java团长公众号发布的关于什么是并发的介绍,以及应对方法:
知识点:
1 方法内的变量是成员变量,是放在栈内存中的。方法外的变量也就是,类的成员变量是 放在堆内存中的。
2 方法内的变量,每个线程都会copy一份,不会有并发问题。而成员变量,是线程公用的,因此可能一个线程,没用完,另一个线程就会接着用,这样数据就对不上了,也就是并发问题。
3 解决方式是,把成员变量定义成final类型的,这样 任何线程都不能修改就不存在,并发问题。 还可以在方法内在使用成员变量时枷锁,这样只有一个线程用完另一个线程才能用,也不会存在并发问题。 这中方式是假定数据一定会被修改,叫做悲观锁。
有可能线程比较少,一个线程工作一段时间之后去休眠,当别的线程修改了它的数据,就重新计算,没有修改,就继续使用原来的数据,这种方式cvs 乐观锁。
Arts打卡第5周的更多相关文章
- Arts打卡第9周
Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...
- ARTS打卡第三周
Algorithm 题目描述 Given an array of integers, find if the array contains any duplicates. Your function ...
- ARTS打卡计划第二周-Share-使用java注解对方法计时
现在有这样一种常见,系统中有一个接口,该接口执行的方法忽快忽慢,因此你需要去统计改方法的执行时间.刚开始你的代码可能如下: long start = System.currentTimeMillis( ...
- ARTS打卡计划第二周-Tips-mysql-binlog-connector-java的使用
最近发现一个挺不错的框架mysql-binlog-connector-java,可以实时监控binlog的变化. 首先检查mysql的binlog是否开启,在开启的情况下: 引入依赖 <depe ...
- ARTS打卡计划第二周-Review
本周review的文章是:https://medium.com/@hakibenita/optimizing-django-admin-paginator-53c4eb6bfca3 改篇文章的题目是: ...
- ARTS打卡计划第二周-Algorithm
665. 非递减数列 https://leetcode-cn.com/problems/non-decreasing-array/ 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元 ...
- ARTS打卡计划第一周-Share-系统字典模块的设计
在软件开发的过程,经常有一些类型的字段信息:性别.学历.职级.车辆类别.公司类型.结算类型等.这些字段有2个特征:1是字段可选的类型是有限,2是字段可能会变化,我们把这种字段描述为字段字段. 本篇文 ...
- ARTS打卡计划第一周-Tips-ControllerAdvice的使用
通常在开发具体项目过程中我们可能会面临如下问题: 统一所有的json返回结果 统一处理所有controller中的异常,并且给不同异常不同的返回状态值 统一对返回的接口做数据校验或者加密,防止篡改 在 ...
- ARTS打卡计划第一周-Review
本周分享的文章来自于medium的 Testing Best Practices for Java + Spring Apps 这个文章主要讲的是java测试的一些最佳实践 1.避免函数返回void, ...
- ARTS打卡计划第一周-Algorithm
7. Reverse Integer import math class Solution: def reverse(self, x: int) -> int: ret = 0 if x > ...
随机推荐
- shim和polyfill 区别解释
polyfill 是 shim 的一种.shim 是将不同 api 封装成一种,比如 jQuery 的 $.ajax 封装了 XMLHttpRequest 和 IE 用 ActiveXObject 方 ...
- js展开循环
当要对一个大数组进行循环时,通常会通过局部变量缓存数组长度来提高性能,例: for(var i=0,len=arr.len;i<len;i++){} 光是缓存数组长度或使用倒序遍历来减少判断外, ...
- django_rest framework 接口开发(二)
1 a. 认证 - 仅使用: from django.views import View from rest_framework.views import APIView from rest_fram ...
- linux内核构造skb发包-----raw、tcp网络编程
1. 内核raw发包 #include <linux/init.h>#include <linux/module.h> #include <linux/kernel.h& ...
- Linux的进程管理基本指令
在Linux操作系统中,进程是指一个程序的运行实例,它需要存储器来存储程序本身及其操作数据.内核负责创建和跟踪进程.当程序运行时,内核首先准备好一些内存,将可执行代码从文件系统加载到内存里,然后开始运 ...
- kvm虚拟机控制台登录配置
vm虚拟机能否像xen虚拟机一样通过virsh console 一样采用字符界面进行linux虚拟机控制台呢,答案是肯定的,默认情况下该命令是不起作用的,需要修改相关文件才能实现. 本文出自:http ...
- ResNet网络的Pytorch实现
1.文章原文地址 Deep Residual Learning for Image Recognition 2.文章摘要 神经网络的层次越深越难训练.我们提出了一个残差学习框架来简化网络的训练,这些 ...
- linux网络编程之system v消息队列(二)
今天继续学习system v消息队列,主要是学习两个函数的使用,开始进入正题: 下面则开始用代码来使用一下该发送函数: 在运行之前,先查看一下1234消息队列是否已经创建: 用上次编写的查看消息队列状 ...
- MySql 数据库 SQLException: The user specified as a definer ('root'@'%') does not exist 错误原因及解决办法
The user specified as a definer ('root'@'%') does not exist 此种报错主要是针对访问视图文件引起的(没有权限) 经查明:是用户root并没有获 ...
- Tornado之Session实现
Tornado框架中,默认执行Handler的get/post等方法之前默认会执行 initialize方法,所以可以通过自定义的方式使得所有请求在处理前执行操作 import tornado.iol ...