零散的Java语法和类笔记
三种StringString :不可改变的,StringBuilder :可改变,速度快,线程不安全StringBuffer:可改变,线程安全
String123456String str="abc";//创建在方法区的常量池里,相同值则共用String str=new String("abc");//创建在堆上,每个对象单独分配str.length();//字符串长度str.concat(str);//拼接字符串str.substring(0,n);//子字符串,左闭右开str.charAt();//索引处char值
StringBuilder123456789StringBuilder str=new StringBuilder("abc");StringBuilder str=new StringBuilder(12);//创建时也可以先开辟空间,再append进去字符str.length();//字符串长度str.append("efg");//追加字符str.delete(0,n);//删除字符 ...
Java集合总结
Stack
ArrayList
LinkedList
HashMap
HashSet
Queue
添加元素
push
add, addAll
add, addAll
put
add
offer
删除元素
pop
remove
remove
remove
remove
poll
查看第一个元素
peek
peek
查看指定元素
get
get
get
修改元素
set
set
replace,put
大小
size
size
size
size
size
size
判断元素是否存在
search
contains
contains
containsKey,containsValue
contains
是否为空
empty
isEmpty
isEmpty
isEmpty
线程安全
是
否
否
否
否
初始化:
1234567Stack<Object> var=new Stack<>();ArrayList<Object> var=new ArrayList<>(); ...
二叉树遍历
二叉树结点结构
123456789101112public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x){ val=x; } @Override public String toString(){ return "val: "+val; }}
访问函数
123public void visit(TreeNode node){ System.out.print(node.val+" ");}
前序遍历递归实现123456public void preOrderRecursion(TreeNode node){ if(node==null)return; visit(node); preOrderRecursion(node.left); preOrd ...
排序算法归纳
插入排序(稳)n^2,1将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增 1 的有序表。
使用双层循环
外层循环对除了第一个元素之外的所有元素
内层循环将当前元素和前面的元素比较,不满足排序要求则交换这两个元素位置。
时间复杂度 O(n^2) 空间复杂度O(1)
伪代码:
12345678910for (int i=1; i<length; ++i) { for ( j = i-1; j >= 0; --j){ if(array[j]和array[j+1]不满足排序顺序){ swap(array,j,j+1); } else{ break; } }}
过程图示:
冒泡排序(稳)n^2,1每轮冒泡,相邻两数,前面的数字大于后面的数字就交换,这样一轮过后,最大的数放在了最后
时间复杂度:O(n^2)
空间复杂度:O(1)
1234567891011121 ...
Java高并发程序设计
基本概念同步和异步用来形容方法调用
同步方法调用:方法调用开始后,调用者必须等到方法返回后才能继续后续的操作
异步方法调用:方法调用开始后,异步方法会在另一个线程中执行,调用者可以继续其他操作。当异步方法有返回值时,会在方法调用结束后返回。
例子:同步调用就像我们在实体店买东西,我们要自己亲自去实体店,买完东西后我们要亲自把东西带回来,而异步就像网购,我们在完成网上支付时买东西这个事件就已经结束了,我们可以去做其他的一些事情,而卖方会将东西给我们送过来。
并发和并行
并发:多个任务交替执行
并行:多个任务同时执行
临界区共享数据,可以被多个线程使用,但一次只能有一个线程用。
阻塞和非阻塞形容多线程间的相互影响。
阻塞:一个线程访问了临界区,其他需要这个临界区资源的线程必须等待。
非阻塞:没有一个线程可以妨碍其他线程的执行,所有线程都会不断的向前执行。
死锁、饥饿和活锁
死锁:两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象 。
饥饿:一个或者多个线程因为种种原因(例如优先级)无法获得所需要的资源,导致一直无法执行。
活锁:获取不到资 ...
深入理解JAVA虚拟机
知识结构
JVM内存结构JVM内存空间:
程序计数器
Java 虚拟机栈
本地方法栈
堆
方法区
记忆方法:java程序由两部分组成:对象和方法。
对象存在堆中
方法存在栈中
一般的方法存在jvm栈中
本地方法存在本地方法栈中。
另外还有静态变量和常量,存在方法区中。
程序运行起来怎么知道运行到哪了呢,用程序计数器。
JDK 1.8 同 JDK 1.7 比,最大的差别就是:元数据区(Metaspace)取代了永久代。元空间的本质和永久代类似,都是对 JVM 规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。
程序计数器记录当前线程正在执行的那条字节码指令的地址
作用
字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制。
在多线程情况下,程序计数器记录的是当前线程执行的位置,从而当线程切换回来时,就知道上次线程执行到哪了。
特点
是一块较小的内存空间。
线程私有,每条线程都有自己的程序计数器。
生命周期:随着线程的创建而创建,随着线程的结束而销毁。
是唯一一个不会出现OutOfMemoryErr ...
剑指Offer刷题笔记
JZ1:二维数组中的查找
左下角开始,遇大右移,遇小上移,直到超过边界都没找到,得false。否则得true。
JZ2:替换空格
自带函数replace
新建stringbuffer用append()
遍历一遍计数空格,每个空格新长度+2,setLength(),从后往前setCharAt()
JZ3:从尾到头打印链表
ArrayList.add(0,value)
递归
JZ4:重建二叉树
递归,前序遍历第一个pre[0]是根节点,在中序遍历中找到pre[0]的位置,对左右分别递归调用函数,可以使用 Arrays.copyOfRange (array,start,end)直接复制数组,左闭右开
JZ5:两个栈实现队列
出栈:栈2空时,先把栈1转移到栈2,再pop,栈2非空时,直接pop
JZ6:旋转数组的最小数字
二分法,三种情况讨论
JZ7:斐波那契数列
当前项是前两项之和
JZ8:跳台阶
递归
JZ9:变态跳台阶
递归,f(n)=f(n-1)+f(n-2)+…+f(1)=2*f(n-1)
JZ10:矩形覆盖
递归,012三种情况单列
JZ1 ...
腾讯物联网-甲醛检测
公司整了一个活动,每个参与活动的同学可以得到一块腾讯物联网的开发板和一个甲醛传感器,只要能按照教程完成这个甲醛监测仪,就可以保留它,否则得归还回去。这么快乐的白嫖机会,怎么能够错过,果断报名参加。
甲醛监测仪介绍甲醛是室内一项非常重要的指标,购买一台甲醛监测仪又显得太不划算,今天就来教大家如何使用TOS_EVB_G0开发板 + TencentOS-tiny物联网操作系统,来自制一个简单的甲醛监测仪。
本项目制作的甲醛监测仪可以实时的检测室内甲醛浓度,在OLED屏幕上显示具体数值,同时还可以将数据实时上报到腾讯云物联网开发平台IoT Explorer,用户可以在“腾讯连连”小程序实时查看数据,并通过公众号及时接收告警信息。
本项目所需要的物品清单有:
TOS_EVB_G0开发板 x 1
英国 Dart 甲醛传感器 x 1
E53甲醛传感器底板 x 1
成品组装图(安装各接插件时,请务必参考成品图,不要弄错方向,否则可能烧坏MCU)
好啦~接下来开始我们的制作!
TOS_EVB_G0开发板开发板特性TOS_EVB_G0 开发板是由腾讯TencentOS-tiny团队设计的一款物联网 ...
古剑奇谭三
今天,古剑奇谭三终于通关了。听着巫之国的BGM,内心总有些空荡荡的,一如当年玩仙剑四。非常感谢烛龙,给我们带来了这么棒的国产ARPG游戏。
我的RPG游戏起点是仙剑一,当时我还是在上小学五年级。
在玩仙剑一之前,我只玩过蜘蛛纸牌一类的小游戏,4399上的一些小游戏都能让我沉迷许久。不过可惜的是,我家的电脑坏了,爸妈也没去修,玩电脑游戏也就仅限于电脑课上的一些小游戏了。直到有一次,爸妈都要出差,把我放在老爸的同事家住了两天,同事家的哥哥当时正好在玩仙剑一,我也因此第一次接触仙剑系列游戏。老实说我对当时的游戏画风其实已经没有多少印象了,现在找来图片发现画质真的很差哎,像素画质,可对于当时的我来说,这已经是无与伦比的游戏了。第一次玩RPG游戏,每一个部分都让我感到新奇——走迷宫、看故事、打boss等等,最让我沉迷的是用“飞龙探云手”这个技能去偷boss的宝物,每次能偷到一些名字很高大上的宝物我都特别开心,那种喜悦仅限于那个年纪的我,之后我再玩仙剑六的时候,虽然也有这种技能,但是当时的兴奋却早已不再。还有李逍遥的各种技能,当时也是能如数家珍地一一道来,尤其是万剑诀,虽然是很初级的技能,但是 ...
Taiwan(2)
2018-07-16第2天早餐这个真的蛮贵的,这是一个香肠的刈包,里面就是一点咸菜和香肠,加上一杯豆浆要55新台币,11人民币了,好贵啊,可能我们去错了餐厅,早上在小吃部吃的,这里除了这个就只有汉堡鸡排了,最有趣的是,我一开始也不知道“刈”字怎么读,还查了一下读音,然后,同学来问我这字怎么念的时候,我突然顺口而出“观刈麦的刈”,都没有经过思考hhh,大概是在别人问我的时候,我的智商就会突然上升吧。
吃完早饭就去行政楼开会了,淑珍姐说了一些事项,然后各自的导师就派学长来领人了,接我的是庄智凯,他也是大三的。然后我们就去了台达馆,学校里的楼都是哪家公司捐钱就用的公司名来命名,比如还有旺宏馆。上海交大就是谁捐了钱用谁的名字,都是人名而非企业名。到那后导师在开group meeting,我也就在里面旁听了,上午是研究生的都是图像相关的,记得的几个有:在全景图片里找太阳(光源)的,根据图像找到公路的路口,根据全景图片构建3维的模型用于房子样板间的预览,条形码里添加企业logo同时保持条形码功能等等,真的好久啊,老师还蛮严肃的,感觉这个实验室的导师更贴合“老板”的称呼,他的态度基本就是我付你工资 ...