分析

求两个整数之和,要求不使用+、-、*、/四则运算符号,那么只能想到用位运算了,其实二进制和十进制的运算是很相似的,都是每一位相加,多出来的进位。以7和3为例,二进制分别是111和101,假设不考虑进位,那么结果就是010,也就是111^101,同时也可以算得进位就是(111&101)<<1,最后就变成了这两个数相加,重复之前的步骤,直到进位是0,就完成了加法。

阅读全文 »

在Java8之前,我们在匿名内部类或者局部内部类中使用局部变量都需要将局部变量声明为final,这是因为java底层给我们做了一些小动作,匿名内部类表面上没有构造函数,其实是有的,底层直接将局部变量通过构造函数传给内部类,局部变量在生命周期结束后就会被销毁,而匿名内部类的生命周期一般来说都比局部变量长,那么假如我们可以修改这个变量,就会出现内外不一致的现象(这里的修改指的是改变引用,而不是改变变量的内容),因为外面的局部变量是不会因为内部的引用改变而改变的,所以强制要求声明为final。
但是在Java8中,出现了Effectively final,意思就是,假如这个局部变量我们在使用过程中都不会出现改变引用的情况,那么我们不需要加final,默认是final,如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {

static volatile boolean flag = true;

public static void main(String[] args) {
Node node = new Node();

new Thread(() -> {
node.a = 2;
}).start();
}

public static class Node {
public int a = 1;
}

}
阅读全文 »

概述

在平时的开发中,我们一般会在子线程请求数据,因为Android的UI操作不是线程安全的,所以我们会有切换到UI线程(主线程)更新UI的需求。有以下两种方法:

阅读全文 »

问题描述

给定一个字符串,问是否能通过添加一个字母将其变为回文串。

阅读全文 »

简介

当希望一个类在程序中只会有一个实例存在的时候,单例模式便会派上用场。为了限制该类对象被随意的创建,我们将构造方法声明为private,但是这样就无法创建对象了,我们该怎么办呢?接下来就从最简单的单例模式讲起。

阅读全文 »

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

阅读全文 »

题目描述

小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个66的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。
给定一个6
6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。

阅读全文 »
0%