源码

怎么跳过阿里腾讯框架面试中的陷阱?这样做!高效学习移动开发

╄→гoц情女王★ 提交于 2019-12-25 00:23:37
这两年移动端发展的越来越快,在ios上特别明显,而Android也是遭遇到了很多打击 特别随着初中级Android开发的逐渐饱和,也让企业在甄选Android面试候选人时变得格外严格,恨不得找一位Android开发做所有的事 我在平时的工作中也是一直接触较多候选人,就这里想和大家说下我对于Android面试的一些看法 1.首先对于Android基础知识的掌握必须要通透! 我把Android基础知识分为:四大组件Activitiy、service、广播、内容提供者,还有fragment,当然这些知识点也不是独立的,每个之间都有融合再一起的知识 比如Activity这个知识点,首先我们需要掌握Activity的使用场景 最常见的在这个Activity中通过嵌入fragment来进行整个项目UI架构的搭建,这时候这个Activity就是整个项目的一个外壳 我们还需要了解整个Activity的生命周期,要知道在那些方法中可以做耗时操作,哪些方法是不可以做耗时操作 在掌握Activity时,我们还需要注意Context的使用,区分在哪些场景可以使用Application context,哪些场景我们尽量使用Activity context 接下来我们还需要掌握Activity的启动模式,知道哪些场景下使用singleTask、哪些场景下使用singTop。 我们回到我们的面试

Spring源码 - @Resource、@PostConstruct、@PreDestroy原理分析(CommonAnnotationBeanPostProcessor - 上)

心不动则不痛 提交于 2019-12-24 13:30:05
目录 一、初始化 CommonAnnotationBeanPostProcessor的静态代码块初始化 CommonAnnotationBeanPostProcessor的无参数构造初始化 二、生命周期和回调时机 1、实现了BeanFactoryAware 2、继承自InitDestroyAnnotationBeanPostProcessor 1)、实现了PriorityOrdered排序接口 2)、实现了MergedBeanDefinitionPostProcessor(生命周期检查阶段) 3)、实现了DestructionAwareBeanPostProcessor接口(生命周期销毁阶段) 3、实现了顶层接口BeanPostProcessor(生命周期初始化阶段) CommonAnnotationBeanPostProcessor 处理 @Resource、javax.xml.ws.WebServiceRef、javax.ejb.EJB 类型;而父类 InitDestroyAnnotationBeanPostProcessor 中 initAnnotationType 和 destroyAnnotationType 分别存储自定义init方法(@PostConstruct)和@PreDestroy的方法。 一、初始化

Java学生信息管理系统源码

别等时光非礼了梦想. 提交于 2019-12-24 12:53:57
学生信息管理系统 功能说明 学生信息管理,包括学生、班级、院系、课程、成绩等的管理。 本程序仅供学习食用。 工程环境 JDK IntelliJ IDEA MySQL 运行说明 1、安装JDK。 2、导入SQL脚本并配置。 使用前请导入DumpStructureOnly.sql(数据库结构文件) 或者 DumpStructure_and_Data.sql(带有测试数据的数据库文件), 使用Navicat导入上述脚本至MySQL数据库 修改dbConn.java配置文件: 数据库端口:3306 数据库名:stuManagerDB 数据库用户名:root 数据库密码:123456 3、运行程序 4、系统登录 打开本程序首先进入登录界面,有账号可直接登录,无账号点击注册进行注册登陆。 帐号密码可以通过数据库tb_user表查询(本源码使用的明码保存,生产项目密码是要加密的) 注意:注册,默认注册普通用户(userType = 2),普通用户无添加用户、删除用户功能;要添加管理员账号(userType = 1)必须在数据库添加。 DumpStructure_and_Data.sql数据库的tb_user表中有学生系统管理员账号:admin,密码为空,可以用其登录测试。 原文地址: https://www.jiagou1216.com/share/grad/749.html 来源: CSDN

Seata源码分析之Session

狂风中的少年 提交于 2019-12-24 12:53:37
目录 一、GlobalSession 二、GlobalSessionLock 三、BranchSession 四、DefaultLockManager 五、Locker 六、MemoryLocker 一、GlobalSession GlobalSession是seata协调器DefaultCoordinator管理维护的重要部件,当用户开启全球分布式事务,TM调用begin方法请求至TC,TC则创建GlobalSession实例对象,返回唯一的xid。它实现SessionLifecycle接口,提供begin,changeStatus,changeBranchStatus,addBranch,removeBranch等操作session和branchSession的方法。 public class GlobalSession implements SessionLifecycle, SessionStorable { private String xid; private long transactionId; private volatile GlobalStatus status; private String applicationId; private String transactionServiceGroup; private String

tp3.2源码解析——入口文件

会有一股神秘感。 提交于 2019-12-24 12:01:15
  如果有人读这篇文章并跟着做的话,希望你能使用支持函数跳转的编辑器,还要善用var_dump和exit,对着源码去调试着看。跟着入口文件读,执行到哪里你看到哪里,对于那些不能一眼看出来的配置,则要记录下来,可能一个比较简单的功能会写出很长的代码,这个时候难免会看到后面忘了前面。   那么进入正题,从index.php文件可以看到入口文件只定义了几项常量作为配置,紧接着就引入了require './ThinkPHP/ThinkPHP.php';    1 // 检测PHP环境 2 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); 3 4 // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false 5 define('APP_DEBUG',True); 6 7 // 定义应用目录 8 define('APP_PATH','./Application/'); 9 10 // 引入ThinkPHP入口文件 11 require './ThinkPHP/ThinkPHP.php';   在ThinkpPHP文件依然比较简单,tp定义了一些常量配置项(defined函数的写法让之前在index入口文件里定义的配置项不会被重置)记录了运行时间和内存使用信息,进行了php版本的判断

jdk1.8源码分析之HashMap

冷暖自知 提交于 2019-12-24 11:53:00
原文链接:https://segmentfault.com/a/1190000012926722?utm_source=tag-newest 1.概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap 。HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现。HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0。HashMap 并不保证键值对的顺序,这意味着在进行某些操作后,键值对的顺序可能会发生变化。另外,需要注意的是,HashMap 是非线程安全类,在多线程环境下可能会存在问题。 在本篇文章中,我将会对 HashMap 中常用方法、重要属性及相关方法进行分析。需要说明的是,HashMap 源码中可分析的点很多,本文很难一一覆盖,请见谅。 2.原理 上一节说到 HashMap 底层是基于散列算法实现,散列算法分为散列再探测和拉链式。HashMap 则使用了拉链式的散列算法,并在 JDK 1.8 中引入了红黑树优化过长的链表。数据结构示意图如下: 对于拉链式的散列算法,其数据结构是由数组和链表(或树形结构)组成。在进行增删查等操作时,首先要定位到元素的所在桶的位置,之后再从链表中定位该元素。比如我们要查询上图结构中是否包含元素 35 ,步骤如下: 定位元素 35 所处桶的位置, index = 35 %

webbench源码阅读

[亡魂溺海] 提交于 2019-12-24 11:49:30
学习内容   一共五百多行代码,其中包含了linux编程常用的API。可以通过学习源码,把不熟悉的API练习练习。 1 如何使用webbench (1)查看参数帮助 (2)运行方法 即以上模拟30个客户端在30秒期间并发请求百度,结果如下: 每分钟平均有1532次请求连接,服务器每秒传输字节为4039230,在30秒期间请求连接成功为766次,失败0次。 2 源码常用函数练习 (1) 选项参数 int getopt_long(int argc, char * const argv[],const char *optstring, const struct option *longopts,int *longindex); 函数中的argc和argv通常直接从main()的两个参数传递而来。optsting是选项参数组成的字符串: option结构数组,option结构称为长选项表,其声明如下: struct option { const char *name; int has_arg; int *flag; int val; }; 结构中的元素解释如下: const char *name:选项名,前面没有短横线。譬如"help"、"verbose"之类。 int has_arg:描述长选项是否有选项参数,如果有,是哪种类型的参数,其值见下表: 符号常量 数值 含义 no

【源码解析】AsyncTask的用法与规则

心不动则不痛 提交于 2019-12-24 10:01:13
引言 AsyncTask ,相信大家已经很熟悉了。它的内部封装了 Thread 和 Handler ,这让我们可以将一些耗时操作放到 AsyncTask ,并且能将结果及时更新到UI上。 AsyncTask 主要用于短时间耗时操作,长时间耗时操作不建议使用 AsyncTask 。下面通过Google官方的一个例子来认识 AsyncTask 的用法。 一个例子 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { protected void onPreExecute() { showProgress(); } protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * 100)); // Escape early if cancel() is called if (isCancelled()) break; } return

dubbo源码-consumer发送请求-直连

情到浓时终转凉″ 提交于 2019-12-24 09:32:33
下面对调用链的方法进行简要的分析, 疑难的部分会重点分析。同时也会根据 上篇文章 创建代理 的分层逐个进行分析。 直连方式的前半部分 直连方式的后半部分,这部分与订阅方式的后半部分是相同的,所以单独提出来 consumer发送请求调用链分析 NettyChannel.send(Object, boolean) //调用 NioClientSocketChannel执行write NettyClient(AbstractClient).send(Object, boolean) /没有连接则创建连接 NettyClient(AbstractPeer).send(Object) //获取 sent 是否等待发送完成 client层:没有连接就创建连接,然后发送数据。 HeaderExchangeChannel.request(Object, int) 创建Request,赋值版本,是否双向,请求data(类型 是RpcInvocation),创建DefaultFuture 传入channel,requst实例,超时时间,以request id为key缓存 future,为同步请求,执行future.get()等待响应做准备. HeaderExchangeClient.request(Object, int) //转发 ReferenceCountExchangeClient

Feign源码分析

狂风中的少年 提交于 2019-12-24 08:29:31
1、Feign和Ribbon的区别 Ribbon是一个客户端负载均衡器。 Feign是在Ribbon的基础上进行封装。 2、Feign的源码分析 来源: CSDN 作者: qq_37119960 链接: https://blog.csdn.net/qq_37119960/article/details/103608357