LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

M.O.T

Magician.of.Technique

MySQL 远程连接相关配置

Server 2018/12/24

关于 MySQL 远程登录相关配置,简单总结一下:

  1. 首先可以创建一个特殊用户用于登录指定host,比如执行如下语句

    // replace with your 'user', 'password' and 'host'
    CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
    // host 可以包含通配符,比如允许192.168.x.x网段,可以配置为192.168.%.%
    
  2. 为刚刚的用户设定权限

    // 该用户有所有数据库的权限
    GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION;
    // 刷新权限
    FLUSH PRIVILEGES;
    
阅读全文

Android Architecture 组件之 Lifecycle

Android 2017/10/28

最近更新了Android Studio 3.0 Stable版本,发现Support 26.+版本默认依赖了Android Architecture Components中的Lifecycle,接下来主要对Lifecycle这个组件进行简单的介绍以及自己对于该组件实现的一些分析,话不多少直接进入正题。

使用

介绍

在说使用之前,先简单解释一下这个组件的作用,从它的名字上基本就能大概的了解到,这个组件是为了监听比如我们的Activity或者Fragment的生命周期的,可以让我们在开发中很容易给ViewModel(MVVM模式)或者Presenter(MVP模式)增加生命周期,接下来开始讲它简单的用法。

开始

首先我们的Activity或者Fragment要实现LifecycleOwner接口,也就是说具有生命周期的组件来实现这个接口

/**
 * A class that has an Android lifecycle. These events can be used by custom components to
 * handle lifecycle changes without implementing any code inside the Activity or the Fragment.
 *
 * @see Lifecycle
 */
public interface LifecycleOwner {
    /**
     * Returns the Lifecycle of the provider.
     *
     * @return The lifecycle of the provider.
     */
    Lifecycle getLifecycle();
}

可以看到,这个接口返回了一个Lifecycle对象,也就是生命周期的提供者,当然这里我们不用自己去实现,Support包中的ActivityFragment中已经帮我们实现了这个接口,后面的实现分析会详细的说明Support包中具体是如何实现的。

阅读全文

Gradle use the new dependency configurations(译)

Android 2017/10/21

Gradle 3.4引入了新的Java Library插件配置,允许您控制是否将依赖关系发布到使用该库的项目的编译和运行时类路径。 Android插件3.0.0正在采用这些新的依赖关系配置,并且迁移大型项目以使用它们可以大大减少构建时间。 下表帮助您了解应该使用的配置。

New configuration Deprecated configuration Behavior
implementation compile 当您的模块配置implementation依赖关系时,它让Gradle知道模块不想在编译时泄漏对其他模块的依赖。 也就是说,依赖关系仅在运行时可用于其他模块。使用这种依赖配置而不是api或compile可以显着的构建时间改进,因为它减少了构建系统需要重新编译的项目数量。 例如,如果implementation依赖关系更改其API,则Gradle仅重新编译依赖关系和直接依赖于它的模块。 大多数应用和测试模块应该使用此配置。
api compile 当一个模块包含api依赖性时,它让Gradle知道该模块希望将该依赖关系传递到其他模块,以便它们在运行时和编译时可用。 此配置的行为就像compile(现在已经不推荐使用),通常只能在库模块中使用。 这是因为,如果api依赖关系改变其外部API,则Gradle会在编译时重新编译可访问该依赖关系的所有模块。 因此,拥有大量的api依赖关系可以大大增加构建时间。 除非要将依赖项的API公开到单独的测试模块,否则应用程序模块应该使用 implementation 依赖。
compileOnly provided Gradle仅添加对编译类路径的依赖(它不会添加到构建输出)。 当您创建一个Android库模块并且在编译期间需要依赖关系时,这很有用,但它是可选的,在运行时存在。 也就是说,如果您使用此配置,那么您的库模块必须包含一个运行时条件,以检查依赖关系是否可用,然后优雅地更改其行为,以便它仍然可以在没有提供的情况下起作用。 这有助于通过不添加不重要的临时依赖关系来减少最终的APK的大小。 此配置的行为就像provided(现在已被弃用)。
runtimeOnly apk Gradle仅添加了对构建输出的依赖关系,以便在运行时使用。 也就是说,它不会添加到编译类路径中。 此配置的行为就像apk(现在已经不推荐使用)。

就像Android插件的当前稳定版本一样,上述配置可用于特定于风格或构建类型的依赖关系。 例如,您可以使用implementation使所有变体的依赖关系可用,也可以使用debugImplementation使其仅适用于模块的debug变种。

Note: compile, provided, and apk are currently still available. However, they will be removed in the next major release of the Android plugin.

原文点击这里

阅读全文

Android 常用命令

Android 2017/10/9

基本命令

1.adb shell dumpsys activity top

查看当前应用 Activity 相关信息

2.abd shell dumpsys package [packageName]

查看指定包名应用的详细信息(也就是 AndroidManifest.xml 中的内容)

3.adb shell dumpsys meminfo [pname/pid]

查看指定进程名或者是进程 id 的内存信息

4.adb shell dumpsys dbinfo [packageName]

查看指定包名应用的数据库存储信息(包括存储的sql语句)

5.adb install

安装应用包 apk 文件

6.adb uninstall

卸载应用

7.adb pull

将设备中的文件放到到本地

adb pull /sdcard/tmp.txt .

8.adb push

将本地文件放到设备中

adb push .tmp.txt /sdcard

9.adb shell screencap

截屏操作

# 截屏到指定文件
adb shell screencap –p /sdcard/tmp.png

10.adb shell screenrecord

录屏操作

# 录屏并且保存到指定文件
adb shell screenrecord /sdcard/tmp.mp4

11.adb shell input text

向手机当前app的输入框中输入文本

adb shell input text 'HelloWorld'

12.adb forward

设备的端口转发

# adb forwrad [(远程端)协议:端口号] [(设备端)协议:端口号]
adb forward tcp:23946 tcp:23946
adb forward tcp:8700 jwdp:1786

13.adb jdwp

查看设备中可以被调试的应用的进程号

14.adb logcat

查看当前日志信息

# adb logcat -s [tag]
# adb logcat | findstr pname/pid/keyword
adb logcat | findstr im.wangchao.test

执行 adb shell 后的命令

15.run-as [packageName]

可以在非 root 设备中查看指定 debug 模式的包名应用沙盒数据

16.ps

查看设备的进程信息,或者是指定进程的线程信息

17.pm clear [packageName]

清空指定包名应用的数据

18.pm install

安装设备中的 apk 文件,功能和 adb install 一样

19.pm uninstall

卸载设备中的应用,功能和 adb uninstall 一样

20.am start -n [包 (package) 名]/[包名].[活动 (activity) 名称]

启动一个应用

21.am startservice -n [包 (package) 名]/[包名].[服务 (service) 名]

启动一个服务

22.am broadcast -a [广播action]

发送一个广播

23.netcfg

查看设备的 ip 地址

24.netstat

查看设备的端口号信息

25.app_process [运行代码目录] [运行主类]

运行 Java 代码

exec /system/bin/app_process /data/im.wangchao.Main

26.dalvikvm –cp [ dex 文件] [运行主类]

运行一个 dex 文件

dalvikvm –cp /data/demo.dex im.wangchao.Main

27.top [-n/-m/-d/-s/-t]

查看应用的 cpu 消耗信息

-m : 最多显示多少个进程

-n : 刷新次数

-d : 刷新间隔时间(默认 5 秒)

-s : 按哪列排序

-t : 显示线程信息而不是进程

28.getprop [属性值名称]

查看系统属性值

操作 apk

29.aapt

查看 apk 中的信息以及编辑 apk 程序包

aapt dump xmltree [ apk 包] [需要查看的资源文件 xml ]

30.dexdump [dex文件路径]

查看一个 dex 文件的相信信息

31.查看进程

# 查看当前进程的内存加载情况
cat /proc/[pid]/maps
# 查看进程的状态信息
cat /proc/[pid]/status
# 查看当前应用使用的端口号信息
cat / proc / [pid] / net / tcp / tcp6 / udp / udp6
阅读全文

Linux 常用命令

Linux 2017/10/9

1.cat

查看文件内容,可以结合grep使用

[root@user: ~]# cat test.txt
hahatest
aaadd
[root@user: ~]# cat test.txt | grep haha
hahatest

2.echo

输出字符,可以结合>>>进行文件写入

[root@user: ~]# echo "haha" > test.txt
[root@user: ~]# echo "haha2" > test.txt
[root@user: ~]# cat test.txt
haha2
[root@user: ~]# echo "haha" >> test.txt
[root@user: ~]# cat test.txt
haha2
haha

3.touch

修改文件时间戳,或者新建一个不存在的文件

# 创建文件
[root@user: ~]# touch test.log test1.log
[root@user: ~]# ll
-rw-r--r-- 1 root root    0 9-28 16:01 test.log
-rw-r--r-- 1 root root    0 9-28 16:01 test1.log
-rw-r--r-- 1 root root    0 9-28 18:42 test3.log
# 设置test.log和test3.log的时间戳相同
[root@user: ~]# touch -r test3.log test.log
[root@user: ~]# ll
-rw-r--r-- 1 root root    0 9-28 18:42 test.log
-rw-r--r-- 1 root root    0 9-28 16:01 test1.log
-rw-r--r-- 1 root root    0 9-28 18:42 test3.log
# 设置文件时间戳
[root@user: ~]# touch -t 201711142234.50 test.log
[root@user: ~]# ll
-rw-r--r-- 1 root root    0 2017-11-14 test.log
-rw-r--r-- 1 root root    0 9-28 16:01 test1.log
-rw-r--r-- 1 root root    0 9-28 18:42 test3.log

4.tar

tar压缩相关

# 创建tar文件
[root@user: ~]# tar cvf target.tar dir/
# 解压缩tar文件
[root@user: ~]# tar xvf target.tar
# 查看tar文件
[root@user: ~]# tar tvf target.tar

5.grep

# 在文件中查找字符串(不区分大小写)
[root@user: ~]# grep -i "haha" test.txt
# 输出成功匹配的行,以及该行之后的三行
[root@user: ~]# grep -A 3 -i "haha" test.txt
# 在一个文件夹中递归查询包含指定字符串的文件
[root@user: ~]# grep -r "test" *

6.gzip

# 创建一个*.gz的压缩文件
[root@user: ~]# gzip test.txt
# 解压*.gz文件
[root@user: ~]# gzip -d test.txt.gz
# 显示压缩的比率
[root@user: ~]# gzip -l *.gz
compressed        uncompressed  ratio uncompressed_name
     23709               97975  75.8% asp-patch-rpms.txt

7.bzip2

# 创建*.bz2压缩文件
[root@user: ~]# bzip2 test.txt
# 解压*.bz2文件
[root@user: ~]# bzip2 -d test.txt.bz2

8.uzip

# 解压*.zip文件
[root@user: ~]# unzip test.zip
# 查看*.zip文件的内容
[root@user: ~]# unzip -l jasper.zip
Archive:  jasper.zip
Length     Date   Time    Name
--------    ----   ----    ----
40995  11-30-98 23:50   META-INF/MANIFEST.MF
32169  08-25-98 21:07   classes_
15964  08-25-98 21:07   classes_names
10542  08-25-98 21:07   classes_ncomp

9.shutdown

# 关闭系统并立即关机
[root@user: ~]# shutdown -h now
# 10分钟后关机
[root@user: ~]# shutdown -h +10
# 重启
[root@user: ~]# shutdown -r now
# 重启期间强制进行系统检查
[root@user: ~]# shutdown -Fr now

参考

写代码怎能不会这些Linux命令?

阅读全文

CentOS 6.5 卸载/安装 MySQL

Linux 2017/7/6

由于CentOS 6.5自带了MySQL 5.1,所以我们如果需要安装其他版本时候需要先卸载之前的版本

# 先查看mysql存在的文件
rpm -qa | grep -i mysql
# 根据查询出来的文件进行删除, ...为上面查出来的其他内容
yum remove mysql mysql-server mysql-libs ...
# 最后删除配置文件
rm -rf /var/lib/mysql
rm /etc/my.cnf

然后就可以开始安装新版本的MySQL

# 安装wget, 如果已经安装请忽略
yum install wget -y
# 安装编译环境,如果以安装请忽略
yum -y install make gcc gcc-c++ zlib-devel libaio
# 安装repo rpm包
wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum localinstall mysql-community-release-el6-5.noarch.rpm
# 安装 mysql 相关
yum -y install mysql-server mysql mysql-devel
# 设置开机启动
chkconfig mysqld on
# 启动mysql
service mysqld start

默认登陆密码查询

cat /var/log/mysqld.log | grep 'password'

如果忘记登陆密码,可以转到这篇文章

最后,安装完了可以删除 MySQL 的 Repository ,这样可以减少 yum 检查更新的时间,使用下面的命令

yum -y remove mysql-community-release-el6-5.noarch

基本命令

# 查看系统已存在的数据库
show databases; 
# 选择需要使用的数据库
use databasesname;   
# 删除选定的数据库
drop database databasename;
# 退出数据库的连接
exit    
# 建立名为test的数据库
create database test01;
# 列出当前数据库下的表
show tables;        

# 开放远程登录权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
阅读全文

CentOS 6.5 配置 JDK + Tomcat + Redis 以及部署 Java Web

Linux 2017/7/6

今天在CentOS 6.5下简单部署了Web App,下面简单记录一下正题的过程。

1.JDK

http://www.oracle.com/technetwork/java/javase/downloads/index.html
首先是JDK的安装(本文以1.8为例),具体执行步骤如下:

cd /usr
# 创建 java 目录
mkdir java
cd java
# 下载 JDK 1.8
curl -O http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
# 解压
tar -zxvf jdk-8u131-linux-x64.tar.gz

然后配置环境变量,执行vi /etc/profile,并添加如下内容:

#set java environment
JAVA_HOME=/usr/java/jdk1.8.0_131
JRE_HOME=/usr/java/jdk1.8.0_131/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

然后执行source /etc/profile后执行java -version对刚刚的配置进行验证。

当然也可以用yum安装JDK,首先使用yum search java | grep jdk查看版本,然后执行yum install java-1.8.0-openjdk进行安装,安装完成后会在/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.75.x86_64目录中。

阅读全文

CentOS 忘记 MySQL root 密码

MySQL 2017/7/6

CentOS系统下忘记常常会因为种种原因忘记MySQLroot的密码,废话不多说直接进入正题(需要注意的是,由于修改密码的过程中MySQL是没有密码保护的,请确认当前环境是否安全)。

1.修改登陆设置

vi /etc/my.cnf

然后在[mysqld]区域追加skip-grant-tables并保存,比如:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables

2.重启mysqld服务

service mysqld restart

3.修改密码

直接执行mysql,然后更新密码

# 进入 mysql
mysql

# 切换 database
mysql> use mysql;
# 更新密码
mysql> update user set password=password('new password') where user='root';
# 刷新MySQL的系统权限相关表
mysql> flush privileges; 
# 退出
mysql> quit

4.恢复登陆设置并且重启mysqld服务

将最开始在/etc/my.cnf中加的skip-grant-tables删除,并保存。然后重启mysqld服务即可。

service mysqld restart
阅读全文

Linux 命令之 ln

Linux 2017/6/30

lnLinux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个链接,这个命令最常用的参数是 -s,具体用法是:ln –s 源文件 目标文件

说明

部分参数说明:

-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名

需要注意的是,链接成功后,修改任意文件,链接关联的文件也会同步修改。通过-s建立的链接是软链接,不会占用磁盘资源,而不加该参数时,为硬链接,会占用磁盘资源生成和源文件相同的文件,当然也会保持同步。

阅读全文

Mac MySql 的安装与卸载

MySQL 2017/6/29

安装

MySql的安装还是相对简单的,现在官网下载安装包,然后直接执行就可以了,需要注意的是,安装到最后可以会有一个弹框,里面的内容大概如下:

2017-06-29T11:24:48.600791Z 1 [Note] A temporary password is generated for root@localhost: &<lulOGYR6cU

If you lose this password, please consult the section How to Reset the Root Password in the MySQL reference manual.

这个是随机生成的root账号的密码,需要记录一下。安装完成就可以在系统偏好设置中看见MySQL了,然后就可以启动服务了。

MySQL安装到了/usr/local/mysql-**目录中,并且/usr/local/mysql为其软连接,我们设置一下mysql/bin环境变量,就可以在使用mysql命令了。

现在我们就需要用到刚刚安装最后给的密码了,使用如下命令登陆MySQL

mysql -uroot -p登陆密码

登陆成功后,通过以下命令修改密码

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
# 上述的 password()函数将会被抛弃,官方建议使用下面的命令来修改密码,注意新的密码规则需要包含数字大小写英文字母以及特殊富豪
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

注意如果登陆不成功或者修改密码失败,需要执行如下步骤:

# step.1 系统偏好设置中关闭MySQL服务

# step.2 
# 进入 mysql/bin
cd /usr/local/mysql/bin/
# 登录管理员权限
sudo su
# 禁止 mysql 验证功能, 执行后 mysql 会重启
./mysqld_safe --skip-grant-tables &

# step.3 
# 分别输入如下命令
./mysql
FLUSH PRIVILEGES
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');

卸载

完全卸载MySQL,执行如下命令即可:

sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
vim /etc/hostconfig  (and removed the line MYSQLCOM=-YES-)
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*
阅读全文
头像
Wang Chao
正しさなんてもの
人のモノサシによって変わる