Java应该掌握的知识

Java应该掌握的知识

以Java工程师应该掌握的知识,按重要程度排出六个梯度:

第一梯度:计算机组成原理、数据结构和算法、网络通信原理、操作系统原理;
第二梯度:Java基础、JVM内存模型和GC算法、JVM性能调优、JDK工具、设计模式;
第三梯度:Spring系列、Mybatis、Dubbo等主流框架的运用和原理;
第四梯度:MySQL(含SQL编程)、Redis、RabbitMQ/RocketMQ/Kafka、ZooKeeper等数据库或者中间件的运用和原理;
第五梯度:CAP理论、BASE理论、Paxos和Raft算法等其他分布式理论;
第六梯度:容器化、大数据、AI、区块链等等前沿技术理论;

git常用命令

git常用命令

一、常用命令

切换到master分支:git checkout master

查看已有本地及远程分支:git branch -a(先git pull拉下全部数据)

查看远程分支:git branch -r

查看所有分支:git branch -a

查看本地分支:git branch

删除远程dev分支:git push origin –delete dev

删除本地dev分支:git branch -d dev

从远程的origin仓库的master分支下载到本地,并新建一个test分支:git fetch origin master:test

本地从当前所在分支上创建一个新分支: git checkout -b 新分支名

查看test分支与本地原有分支的不同:git diff test

将test分支和当前分支合并:git merge test

将远程git仓库里的指定分支拉取到本地(本地不存在的分支):git checkout -b 本地分支 origin/远程分支,或者 git pull origin dev(remote):dev(local)

将本地master分支提交到远程dev分支:git push origin master:dev

注解相关知识

注解相关知识

注解@Retention可以用来修饰注解,是注解的注解,称为元注解。

Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
@Retention 注解指定标记注解的存储方式:
RetentionPolicy.SOURCE - 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
RetentionPolicy.CLASS - 标记的注解在编译时由编译器保留,但Java虚拟机(JVM)会忽略。 这是默认的生命周期;
RetentionPolicy.RUNTIME - 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在,因此运行时环境可以使用它。

@Target 注解标记另一个注解,以限制可以应用注解的 Java 元素类型。目标注解指定以下元素类型之一作为其值:

ElementType.ANNOTATION_TYP可以应用于注解类型。
ElementType.CONSTRUCTOR 可以应用于构造函数。
ElementType.FIELD 可以应用于字段或属性。
ElementType.LOCAL_VARIABLE 可以应用于局部变量。
ElementType.METHOD 可以应用于方法级注解。
ElementType.PACKAGE 可以应用于包声明。
ElementType.PARAMETER 可以应用于方法的参数。
ElementType.TYPE 可以应用于类的任何元素。

package com.example.inject;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

在Activity 中增加注解标注,通过注解+反射+动态代理等,来优化Activity中代码。省去 setContentView、findViewById、setOnClickListener等操作。

Layout注解

1
2
3
4
5
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface InjectLayout {
@LayoutRes int value();
}
序列化面试题

序列化面试题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
面试相关
1. 反序列化后的对象,需要调用构造函数重新构造吗
反序列化调用不会调用构造函数。以存储的二进制数据进行构造

2. 序列前的对象与序列化后的对象是什么关系?是("=="还是equal?是浅复制还是深复制?)
序列化前和序列化后 是两个不同的对象,对象地址发生了改变。调用equal 和 == 返回true。是一个深复制。

3. Android里面为什么要设计出Bundle而不是直接用Map结构
Bundle中是使用的Parcel打包数据。Parcel可以实现跨进程通讯。
<!-- more -->
Bundle内部是由ArrayMap实现的,ArrayMap的内部实现是两个数组,一个int数组是存储对象数 据对应下标,一个对象数组
保存key和value,内部使用二分法对key进行排序,所以在添加、删 除、查找数据的时候,都会使用二分法查找,只适合于小数
据量操作,如果在数据量比较大的情况 下,那么它的性能将退化。而HashMap内部则是数组+链表结构,所以在数据量较少的时候,
HashMap的Entry Array比ArrayMap占用更多的内存。因为使用Bundle的场景大多数为小数据 量,我没见过在两个Activity之
间传递10个以上数据的场景,所以相比之下,在这种情况下使用 ArrayMap保存数据,在操作速度和内存占用上都具有优势,
因此使用Bundle来传递数据,可以保 证更快的速度和更少的内存占用。 另外一个原因,则是在Android中如果使用Intent来携带数据的话,
需要数据是基本类型或者是可 序列化类型,HashMap使用Serializable进行序列化,而Bundle则是使用Parcelable进行序列化。
而在Android平台中,更推荐使用Parcelable实现序列化,虽然写法复杂,但是开销更小,所以为 了更加快速的进行数据的序列化和反序列化,
系统封装了Bundle类,方便我们进行数据的传输。

4. SerialVersionID的作用是什么?
版本控制

5. Android中Intent/Bundle的通信原理及大小限制
大小限制 bundle 在zgote在创建进程的时候,分配了binder的内存大小。binder申请匿名内存有限制。
binder在内核空间创建内存映射时,大小限制在 < 4M
intent 1M限制
Intent 中的 Bundle 是使用 Binder 机制进行数据传送的。能使用的 Binder 的缓冲区是有大小限 制的(有些手机是 2 M),
而一个进程默认有 16 个 Binder 线程,所以一个线程能占用的缓冲区 就更小了( 有人以前做过测试,大约一个线程可以占用 128 KB)。
所以当你看到 The Binder transaction failed because it was too large 这类 TransactionTooLargeException 异常时,
你应 该知道怎么解决了

6. 为何Intent不能直接在组件间传递对象而要通过序列化机制?
startActivity(intent),activity启动流程要和AMS交互,需要跨进程通讯。只有把数据序列化后,传递。

7. 序列化与持久化的关系和区别是什么?
序列化:跨进程传输数据时,需要使用序列化。
持久化:数据的存储。
Intent在启动其他组件时,会离开当前应用程序进程,进入ActivityManagerService进程 (intent.prepareToLeaveProcess()),
这也就意味着,Intent所携带的数据要能够在不同进程间 传输。首先我们知道,Android是基于Linux系统,不同进程之间的java对象是无法传输,
所以我 们此处要对对象进行序列化,从而实现对象在 应用程序进程 和 ActivityManagerService进程 之间 传输。
而Parcel或者Serializable都可以将对象序列化,其中,Serializable使用方便,但性能不如Parcel 容器
,后者也是Android系统专门推出的用于进程间通信等的接口
各种学习资料,包括一些百度云视频链接还有pdf资料 --搬运工

各种学习资料,包括一些百度云视频链接还有pdf资料 --搬运工

人生不如意事常八九 共勉

【0】Springboot微服务开发天气预报系统视频教程 https://pan.baidu.com/s/1joz7flyztCq8oklBlsz8dQ 提取密码:cpz7

【1】JAVA300集大型视频教程2018版发布 https://pan.baidu.com/s/1Bqy4mWSD1idd6JmIzS9ZLg 提取密码:llg2

【2】Vue2.5开发去旅游网站App从零基础入门到实战项目 https://pan.baidu.com/s/1DYCoIw_b893KXGkkYt_92Q 提取密码:bgoy

【3】opencv+tensorflow入门人工智能图像处理视频教程+源码下载 https://pan.baidu.com/s/10WefZkTQST094L5UQA7myg 提取密码:7b9w

【4】最新BAT面试真题讲解,想去大厂的别错过 https://pan.baidu.com/s/1ejf2Eh8ZA-T1bWbuT6gw0A 提取密码:mist

【5】Python3异步IO并发编程高级进阶视频教程下载 https://pan.baidu.com/s/1jiRwD5MNPmAKF98nXYzmKg 提取密码:hct4

【6】最新大数据数据分析与挖掘高级工程师第三期视频教程 https://pan.baidu.com/s/1g8xGPag9GiMA4_MEKbxePw 提取密码:z2v3

【7】姜承尧MYSQL,DBA视频课程(44天全)视频教程下载 https://pan.baidu.com/s/19NUjkkvdDZXhw1QG4yX21Q 提取密码:funf

【8】Python+AnsiblePlaybook+Django自动化运维项目实践课程 https://pan.baidu.com/s/1CfOHuaYi_TdPoAUzP9AW1w 提取密码:o3rc

【9】springcloud微服务实践-分布式与原理剖析链路追踪容器 https://pan.baidu.com/s/1g8QoqOnQwjI7N3zDSccr-w 提取密码:ygf5

【10】2018年最新Java高并发知识体系与高并发编程架构课程视频教程下载 https://pan.baidu.com/s/1E1NhSevRqwdnguiKSsOp5A 提取密码:mkh2

【11】2018年最新价值300Python人工智能TensorFlow框架应用实践视频课程下载 https://pan.baidu.com/s/1qYJjFz9aG6M5grMg311uRQ 提取密码:5hzp

【12】谭州学院价值1680元python视频教程12306网站案例vip特训班教程 https://pan.baidu.com/s/1yEQq5W1eSc3NA4XmyNmuJw 提取密码:cipi

【13】下载 https://pan.baidu.com/s/1D6hYdyi4ti2zpnKHVWWbEg 提取密码:glov

【14】Netty实战高性能分布式RPC视频教程下载 https://pan.baidu.com/s/1sDHh_g624MO08MTFIrwEDw 提取密码:mwa6

【15】2018年最新尚学堂Vue2全套学习视频教程下载 https://pan.baidu.com/s/147NvAV-Qse90xvTYDvHBcg 提取密码:wpfg

【16】最新2018疯狂SpringCloud微服务架构实战视频教程 https://pan.baidu.com/s/1jgC0lagtMG7tArATrAAHXg 提取密码:10kf

搭建 WordPress 博客教程(超详细)

搭建 WordPress 博客教程(超详细)

本文转自:Nonecy 的小黑屋
链接:http://blog.studymany.com/2018/07/29/create-wordpress-blog/

需要

  • 一台服务器
  • 一个域名,直接通过ip访问好傻好傻的样子,哈哈。
  • linux知识
  • 肯折腾

具体步骤

第一步购买服务器,国内阿里云的云服务器挺不错的,国外的就更多了,这一步就不介绍了,不懂得的自己上网搜。

接下来操作需要:

远程连接服务器

Windows 用户

以Xshell为例。

  1. 下载安装Xshell,官网链接

  2. 安装完成后新建会话(Alt+N)。依次填写图中信息。
    名称可以是Vultr或者其他,协议选择SSH,主机填写之前的IP Address,端口号选择22。

连接

点击左侧的用户身份验证,填写信息。方法选择Password,用户名为之前的Username(一般都是root),密码为之前的Password(这个建议直接复制粘贴过来,系统给的有点复杂)

用户身份验证

填写完之后点击确定。然后点击连接。出现其他提示的话选择接受就可以了。这时你就可以看到一个命令控制台了。这时就算连接成功了。

Mac OS 用户

打开终端或者iTerm2等。


:D 一言句子获取中...