源码

idea-git操作

随声附和 提交于 2020-02-23 03:58:06
摘自:https://blog.csdn.net/qq_39470733/article/details/80366435 工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程Git仓库上获取项目源码 场景三:小袁修改了部分源码,提交到远程仓库 场景四:小张从远程仓库获取小袁的提交 场景五:小袁接受了一个新功能的任务,创建了一个分支并在分支上开发 场景六:小袁把分支提交到远程Git仓库 场景七:小张获取小袁提交的分支 场景八:小张把分支合并到主干 下面来看以上各场景在IDEA中对应的操作。 场景一:小张创建项目并提交到远程Git仓库 创建好项目,选择VCS - > Import into Version Control -> Create Git Repository 接下来指定本地仓库的位置,按个人习惯指定即可,例如这里选择了项目源代码同目录 点击OK后创建完成本地仓库,注意,这里仅仅是本地的。下面把项目源码添加到本地仓库。 下图是Git与提交有关的三个命令对应的操作,Add命令是把文件从IDE的工作目录添加到本地仓库的stage区,Commit命令把stage区的暂存文件提交到当前分支的仓库,并清空stage区。Push命令把本地仓库的提交同步到远程仓库。

源码安装MYSQL及清理安装环境

萝らか妹 提交于 2020-02-23 03:40:54
1、清理安装环境 yum erase mariadb mariadb-server mariadb-libs mariadb-devel -y userdel -r mysql rm -rf /etc/my* rm -rf /var/lib/mysql 2、创建mysql用户 useradd -r mysql -M -s /bin/false 3、从官网下载tar包 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.27.tar.gz 4、安装编译工具 yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake: yum -y install cmake 5、创建mysql目录 mkdir -p /usr/local/{data,mysql,log} 6、解压 tar xzvf mysql-boost-5.7.27.tar.gz -C /usr/local/ 7、编译安装 cd /usr/local/mysql-5.7.27/ cmake . -DWITH_BOOST=boost/boost_1_59_0 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

JDK1.8-HashMap源码分析

时光毁灭记忆、已成空白 提交于 2020-02-23 02:48:22
HashMap,用的再多不过的东西了,面试中也经常问到,但是总是会答不出来一个所以然,回答的都太表面,要么就表达不清楚。俗话说,表达不清或者不能够让别人听懂就是自己没有搞懂。所以我要好好整理一下HashMap了。 这篇文章以JDK1.8为基础,因为JDK1.8里面引入了红黑树,真的很有意思,如果要了解红黑树,可以去看看我写的一片文章,关于红黑树的。读懂了后再来分析HashMap会了解许多。首先对于分析任何一个源码,掌握其数据结构是最基本,也是分析源码最重要的,这是精华OK?那么HashMap的精华就是数组+链表+红黑树。 看到没有,HashMap的数据结构就是上面这个样子。它的最左边也就是它所实现的“hash”,是一个数组,这样访问某一个bucket可以达到O(1)的复杂度。右边分别对应着链表和红黑树,插入删除都非常方便,访问也非常快速。而在源码里面实际的数据结构这样子: HashMap中的经典类变量 transient Node < K , V > [ ] table ; 这个就是用来存储实际数据的,每个节点是一个Node的数据结构或者说对象吧,看你怎么理解,它只有在初次使用的时候才初始化,注意构造方法不会初始化它。而且他是一个数组,会根据需要来扩容,长度永远是2的幂。 //这个值构造方法里也没有参数指定,因为它是直接由Capacity*loadFractor

吃透Netty源码系列三十二之Recycler细节解析一

扶醉桌前 提交于 2020-02-22 23:41:52
吃透Netty源码系列三十二之Recycler细节解析一 Recycler 一些配置属性 简单例子入手 Recycler初始化 DELAYED_RECYCLED threadLocal Stack构造方法 处理器回收recycle(this) stack.push pushNow当前线程是Stack的所属线程 dropHandle pushLater当前线程不是Stack的所属线程 newWeakOrderQueue创建队列 Head链接管理者 Link具体存对象 Head.reserveSpaceForLink为Link申请空间 WeakOrderQueue构造方法 stack.setHead(queue) 设置头结点 queue.add加入队列 head.newLink创建链接 Recycler 首先他是个抽象类,有个抽象方法,创建对象,也就是说在对象池没有对象的时候得能创建对象: protected abstract T newObject ( Handle < T > handle ) ; 他与对象池配合使用,比如 ObjectPool 中的 RecyclerObjectPool : private static final class RecyclerObjectPool < T > extends ObjectPool < T > { private final

在xcode中调用上面生成的framework库

♀尐吖头ヾ 提交于 2020-02-22 20:55:34
1.新建项目 2.导入源码,依赖库 源码拖到compile sources 依赖的framework库add进去就自己出现在build phase了 3.添加头文件链接 其中framework search path是add后自己生成的 添加header search path build 报错 网上有说修改 build settings - archetecture,没啥用 仔细看提示 说没定义x86_64这个东西,感觉是缺少什么依赖 应该是指令集的问题吧 https://www.jianshu.com/p/5fb1db2e8ffa ,这篇介绍了Archetecture 官方文档 来源: CSDN 作者: vanlyy 链接: https://blog.csdn.net/weixin_38719347/article/details/104447667

【集合框架】JDK1.8源码分析之LinkedHashMap(二)

这一生的挚爱 提交于 2020-02-22 20:51:30
一、前言   前面我们已经分析了HashMap的源码,已经知道了HashMap可以用在哪种场合,如果这样一种情形,我们需要按照元素插入的顺序来访问元素,此时,LinkedHashMap就派上用场了,它保存着元素插入的顺序,并且可以按照我们插入的顺序进行访问。 二、LinkedHashMap用法 import java.util.Map; import java.util.LinkedHashMap; public class Test { public static void main(String[] args) { Map<String, String> maps = new LinkedHashMap<String, String>(); maps.put("aa", "aa"); maps.put("bb", "bb"); maps.put("cc", "cc"); for (Map.Entry entry : maps.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } } } View Code 说明:以上是展示LInkedHashMap简单用法的一个示例,可以看到它确实按照元素插入的顺序进行访问,保持了元素的插入顺序。更具体的用户可以去参照API。 三

Wargame-Natas练习记录(0~14)

*爱你&永不变心* 提交于 2020-02-22 15:23:02
Wargames是OverTheWire社区提供的一个帮助学习安全知识和实践的一个平台,提供了各式各样的项目模块,可以在其中练级基本的安全技能。 Natas是其中一个最基础的模块,主要用来学习Web安全服务器端的基本安全策略,包含了文件上传、命令行注入、SQL注入等常见的基本安全漏洞,适合Web安全入门学习。 这里主要用来记录个人的练习过程的思路,作为学习的参考。 Wargame: https://overthewire.org/wargames/ Natas: https://overthewire.org/wargames/natas/ Level 0->1: 提示密码就在本页,那就看一下源码呗。 很容易找到注释 <!--The password for natas1 is gtVrDuiDfck831PqWsLEZy5gyDz1clto --> 。 Level 1->2: 提示密码就在本页,但是右键不能使用。好办,F12比右键好用多了。 还是注释里: <!--The password for natas2 is ZluruAthQk7Q2MqmDeTiUij2ZvWy2mBi --> Level 2->3: 这次说页面上没有东西,那就是在其他地方了,查看返回文件时发现多了一个/files/piexl.png;直接访问只有一个像素点,图像没有任何信息,返回上一层看看。

ConcurrentHashMap源码分析

隐身守侯 提交于 2020-02-22 11:48:17
ConcurrentHashMap解决了HashMap的线程不安全问题,在分析之前先介绍一个将HashMap线程安全的方法。利用 Collections.synchronizedMAp方法 调用内部类 SynchronizedMap HashMap<String, String> map = new HashMap<>(); Map m = Collections.synchronizedMap(map); private static class SynchronizedMap<K,V> implements Map<K,V>, Serializable { private static final long serialVersionUID = 1978198479659022715L; private final Map<K,V> m; // Backing Map final Object mutex; // Object on which to synchronize SynchronizedMap(Map<K,V> m) { this.m = Objects.requireNonNull(m); mutex = this; } SynchronizedMap(Map<K,V> m, Object mutex) { this.m = m; this.mutex =

PriorityQueue 源码分析

删除回忆录丶 提交于 2020-02-22 08:25:17
PriorityQueue PriorityQueue 能解决什么问题?什么时候使用 PriorityQueue? 1)PriorityQueue 基于优先级堆实现的无界优先级队列,优先级队列的元素根据自然顺序或指定的比较器进行排序。 当需要按照指定的优先级读取元素时,可以使用 PriorityQueue。 2)优先级队列不允许使用 null 元素,并且元素必须实现 Comparable 接口。 3)PriorityQueue 的头元素是排序最小的元素,存在多个最小的头元素时,随机选取其中的一个。 4)PriorityQueue 不是线程安全的,如果需要并发访问,请使用 PriorityBlockingQueue。 如何使用 PriorityQueue? 1)需要按照优先级读取元素的场景,如延时任务处理。 2)PriorityQueue 可以解决 topN 问题(由于键不能重复,使用 TreeMap 时需要维护指定键出现的次数)。 使用 x 有什么风险? 1)PriorityQueue 未限制存储容量,可能导致内存溢出。 #### x 核心操作的实现原理? 创建实例 /** * 默认初始容量 */ private static final int DEFAULT_INITIAL_CAPACITY = 11; /** * 用于构建平衡二叉堆的底层数组 * 父节点:queue[n] *

Linux内存管理源码剖析(三)

一个人想着一个人 提交于 2020-02-21 11:22:53
一、小块内存分配 前面剖析了Linux分配大块内存的机制,也清楚了物理内存的组织机制,本次先来讲述小块内存的分配机制。 从fork创建一个进程开始讨论 经过在系统调用表sys_call_table中的查找之后会调用系统调用sys_fork,sys_fork又调用_do_fork函数,主要做两件事,第一复制父进程的task_struct结构,第二唤醒这个新创建的进程: SYSCALL_DEFINE0 ( fork ) { //linux-4.13.16\kernel\fork.c return _do_fork ( SIGCHLD , 0 , 0 , NULL , NULL , 0 ) ; } long _do_fork ( unsigned long clone_flags , unsigned long stack_start , unsigned long stack_size , int * parent_tidptr , int * child_tidptr , unsigned long tls ) { struct task_struct * p ; 。。。 /* copy_process复制进程结构*/ p = copy_process ( clone_flags , stack_start , stack_size , child_tidptr , NULL ,