源码

聚宽源码11

丶灬走出姿态 提交于 2019-12-14 23:52:45
原文策略源码如下: #酒行业的中短线策略 def initialize(context): run_daily(period,time=‘every_bar’) g.stocksnum=6 def period(context): scu=get_index_stocks(‘000001.XSHG’)+get_index_stocks(‘399106.XSHE’) q=query(valuation.code).filter(valuation.code.in_(scu)).order_by(valuation.market_cap.asc()).limit(g.stocksnum) df=get_fundamentals(q) stocklist=list(df[‘code’]) m=get_current_data() buylist=stocklist for stock in context.portfolio.positions: if stock not in buylist: #如果stock不在buylist order_target(stock, 0) for stk in buylist: order_value(stk,15000) for stk in context.portfolio.positions: cost=context.portfolio

APIView 源码分析

谁说我不能喝 提交于 2019-12-14 22:44:01
@classmethod #实例和类都可以调用 def as_view ( cls, **initkwargs ) : "" " Store the original class on the view function. This allows us to discover information about the view when we do URL reverse lookups. Used for breadcrumb generation. " "" if isinstance ( getattr ( cls, 'queryset' , None ) , models.query.QuerySet ) : def force_evaluation ( ) : raise RuntimeError ( 'Do not evaluate the ` .queryset ` attribute directly, ' 'as the result will be cached and reused between requests. ' 'Use ` .all ( ) ` or call ` .get_queryset ( ) ` instead.' ) #这个是为了限制你只能动态地创建 queryset ,而不能是一个常量 cls.queryset._fetch_all

Redis源码剖析--对象object

半世苍凉 提交于 2019-12-14 16:33:49
前面一系列的博客分析了Redis的基本数据结构,有动态字符串sds、双端链表sdlist、字典dict、跳跃表skiplist、整数集合intset和压缩列表ziplist等,这些数据结构对于用户来说是不可见的。 Redis在这些数据结构的基础上构建了对用户可见的五种类型,分别是string、hash、list、set和zset,为了更方便的使用这五种数据类型,Redis定义了RedisObject结构体来表示它们。今天,我们就一起来看看RedisObject是如何构建的!(如果底层结构不熟悉的,可以点击上述) RedisObject数据结构 在server.h文件中,给出了RedisObject的结构体定义,我们一起来看看。 typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; // LRU_BITS为24 int refcount; void *ptr; } robj; 其中,ptr指向对象中实际存放的值,这里不需要过多解释,针对其他四个结构体参数,作如下说明: 类型type Redis的对象有五种类型,分别是string、hash、list、set和zset,type属性就是用来标识着五种数据类型。type占用4个bit位,其取值和类型对应如下:

精尽 Spring Boot 源码分析 —— 自动配置

二次信任 提交于 2019-12-14 11:29:40
精尽 Spring Boot 源码分析 —— 自动配置 1. 概述 本文,我们来分享 Spring Boot 自动配置的实现源码。在故事的开始,我们先来说两个事情: 自动配置和自动装配的区别? Spring Boot 配置的原理 2. 自动配置 V.S 自动装配 在这篇文章的开始,艿艿是有点混淆自动配置和自动装配的概念,后来经过 Google 之后,发现两者是截然不如同的: 自动配置:是 Spring Boot 提供的,实现通过 jar 包的依赖,能够自动配置应用程序。例如说:我们引入 spring-boot-starter-web 之后,就自动引入了 Spring MVC 相关的 jar 包,从而自动配置 Spring MVC 。 自动装配:是 Spring 提供的 IoC 注入方式,具体看看 《Spring 教程 —— Beans 自动装配》 文档。 所以,不要和艿艿一样愚蠢的搞错落。 3. 自动装配原理 胖友可以直接看 《详解 Spring Boot 自动配置机制》 文章的 「二、Spring Boot 自动配置」 小节,艿艿觉得写的挺清晰的。 下面,我们即开始正式撸具体的代码实现了。 4. @SpringBootApplication org.springframework.boot.autoconfigure.@SpringBootApplication 注解,基本我们的

Python源码剖析--Pyc文件解析

我的梦境 提交于 2019-12-14 10:54:53
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. PyCodeObject 与 Pyc 文件 通常认为, Python 是一种解释性的语言,但是这种说法是不正确的,实际上, Python 在执行时,首先会将 .py 文件中的源代码编译成 Python 的 byte code (字节码),然后再由 Python Virtual Machine 来执行这些编译好的 byte code 。这种机制的基本思想跟 Java , .NET 是一致的。然而, Python Virtual Machine 与 Java 或 .NET 的 Virtual Machine 不同的是, Python 的 Virtual Machine 是一种更高级的 Virtual Machine 。这里的高级并不是通常意义上的高级,不是说 Python 的 Virtual Machine 比 Java 或 .NET 的功能更强大,更拽,而是说和 Java 或 .NET 相比, Python 的 Virtual Machine 距离真实机器的距离更远。或者可以这么说, Python 的 Virtual Machine 是一种抽象层次更高的 Virtual Machine 。 我们来考虑下面的 Python 代码: [demo.py] class A : pass def Fun ():

深入分析RecyclerView源码——滑动机制

﹥>﹥吖頭↗ 提交于 2019-12-14 10:08:24
RecyclerView布局之外,最常用的功能应该就是滑动。RecyclerView的事件处理依然是常规的onTouchEvent根据触控事件响应,特别的是RecyclerView采用了嵌套滑动机制,会把滑动事件通知给支持嵌套滑动的父view先做决定,以实现诸如toolBar上划隐藏的效果,还有就是涉及到缓存策略,不过相比布局,滑动的缓存策略要简单的多,仅仅是把划出屏幕的viewHolder存入mCachedViews。 onTouchEvent public boolean onTouchEvent(MotionEvent e) { //如果使用了ItemTouchHelper,先让它处理 if (dispatchToOnItemTouchListeners(e)) { cancelScroll(); return true; } //LayoutManager是否支持水平或竖直滑动 final boolean canScrollHorizontally = mLayout.canScrollHorizontally(); final boolean canScrollVertically = mLayout.canScrollVertically(); boolean eventAddedToVelocityTracker = false; //Mask和是事件类型

SpringCloud gateway 限流源码分析

亡梦爱人 提交于 2019-12-14 04:51:39
路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应,路径过滤器的范围限定为特定路径,Spring Cloud Gateway包含许多内置的GatewayFilter工厂。 Spring Cloud Gateway限流就是通过内置的RequestRateLimiterGateWayFilterFactory工厂来实现的。 当然,官方的肯定不能满足我们部分业务需求,因此可以自定义限流过滤器。 ## yml如下配置,就可以为该路由添加此拦截器: spring: cloud: gateway: routes: - id: test_route uri: localhost predicates: - Path=/host/address filters: - name: RequestRateLimiter args: ## 允许用户每秒执行多少请求,而不会丢弃任何请求。这是令牌桶填充的速率。 redis-rate-limiter.replenishRate: 1 ## 是一秒钟内允许用户执行的最大请求数。这是令牌桶可以容纳的令牌数。将此值设置为零将阻止所有请求。 redis-rate-limiter.burstCapacity: 3 ## KeyResolver是一个简单的获取用户请求参数 我这里以主机地址为key来作限流 key-resolver: "#{

Spring源码学习笔记之基于ClassPathXmlApplicationContext进行bean标签解析

末鹿安然 提交于 2019-12-14 02:18:35
bean 标签在spring的配置文件中, 是非常重要的一个标签, 即便现在boot项目比较流行, 但是还是有必要理解bean标签的解析流程,有助于我们进行 基于注解配置, 也知道各个标签的作用,以及是怎样被spring识别的, 以及配置的时候需要注意的点. 传统的spring项目,spring内部启动的方式是基于ClassPathXmlApplicationContext启动的: @Test public void test1() { //传入spring的配置文件路径 ApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("spring.xml"); System.out.println(""); }// 调用有参构造,设置spring配置文件的位置 public ClassPathXmlApplicationContext(String configLocation) throws BeansException { this(new String[] {configLocation}, true, null); }//进一步跟进public ClassPathXmlApplicationContext( String[] configLocations,

深入JDK源码分析ThreadLocal

橙三吉。 提交于 2019-12-14 00:52:56
深入源码JDK分析ThreadLocal ThreadLocal为当前线程创建和维护变量副本,并对其他线程不可见,确保线程安全,本文通过探究源码来深入了解其原理. 先看set()方法的实现: public void set ( T value ) { Thread t = Thread . currentThread ( ) ; //从当前线程Thread中获取ThreadLocalMap实例。 ThreadLocalMap map = getMap ( t ) ; if ( map != null ) //ThreadLocal实例和value封装成Entry。 map . set ( this , value ) ; else createMap ( t , value ) ; } ThreadLocalMap getMap ( Thread t ) { return t . threadLocals ; } 看看map.set()方法如何将Entry存入table数组: private void set ( ThreadLocal < ? > key , Object value ) { Entry [ ] tab = table ; int len = tab . length ; //通过ThreadLocal的nextHashCode方法生成hash值 //通过