work

《Load Balancing of Heterogeneous Workloads in Memcached Clusters》阅读

て烟熏妆下的殇ゞ 提交于 2020-02-26 15:39:11
Table of Contents 题目:Memcached集群中异构工作负载的负载平衡 摘要 1.简介 题目:Memcached集群中异构工作负载的负载平衡 摘要 1.简介 来源: CSDN 作者: 风筝_ 链接: https://blog.csdn.net/m0_38062470/article/details/104515804

Binder死亡通知机制之linkToDeath

拈花ヽ惹草 提交于 2020-02-26 09:41:00
copy from : http://gityuan.com/2016/10/03/binder_linktodeath/ 基于Android 6.0源码, 涉及相关源码 frameworks/base/core/java/android/os/Binder.java frameworks/base/core/jni/android_util_Binder.cpp frameworks/native/libs/binder/BpBinder.cpp 一. 概述 死亡通知是为了让Bp端(客户端进程)进能知晓Bn端(服务端进程)的生死情况,当Bn端进程死亡后能通知到Bp端。 定义:AppDeathRecipient是继承IBinder::DeathRecipient类,主要需要实现其binderDied()来进行死亡通告。 注册:binder->linkToDeath(AppDeathRecipient)是为了将AppDeathRecipient死亡通知注册到Binder上。 Bp端只需要覆写binderDied()方法,实现一些后尾清除类的工作,则在Bn端死掉后,会回调binderDied()进行相应处理。 1.1 实例说明 public final class ActivityManagerService { private final boolean

设计模式之策略模式

好久不见. 提交于 2020-02-24 13:50:47
  本篇来介绍一下设计模式之策略模式。   以下是本文目录大纲:   1.用策略模式改进一个设计实例。   2.策略模式的介绍和设计思路。   3.策略模式用到的设计原则。   4.设计实例的java实现。      转载请注明原文出处。   若有不正确的地方,欢迎大家的批评指正。 1.用策略模式改进一个设计的实例   现在要做一款模拟人生类游戏,游戏中有各种职业的人(教师、学生、工人、司机)。这些人都有着像姓名、性别等属性,行走、吃饭等相同的行为,当然他们有着不同的工作。我们这里为各种职业的人设计一个类来描述他们的特征,按照OO设计的思想,产生了如下的设计: 用一个抽象类来描述不同职业的人共用的特征,并将work方法在基类中设置为抽象方法,让继承People类的子类去实现不同的work方法,来区别不同职业人的工作。这时游戏中增加了乞丐的人物设定,这时这个设计就出现了问题:乞丐类也要去继承抽象类People,那必须去实现work方法,而乞丐并不存在职业。所以从这种设计我们可以体会到,当涉及系统的维护时,为了达到代码复用的目的而使用继承的方法并不是一个好的选择。   此时我们可以考虑使用接口将方法work()从基类People分离出来,让那些拥有工作的人去实现这个接口,从而满足设计的需求,于是产生了如下的设计:   这种设计模式虽然解决了乞丐的问题,但随着游戏规模的扩大

sap --- ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介

偶尔善良 提交于 2020-02-24 06:45:41
刚开始学ABAP的时候,学到iternal table时,感觉一阵混乱. 搞不清楚什么是work area,什么是header line,以及occurs是干什么用的. 今天终于差不多搞明白了(我还是太弱啊...BS自己一下) 所以还是记录下来..省得自己以后再忘记... 先是用TYPES关键字定义一个行(row)的类型.如下: TYPES: BEGIN OF line, field1 TYPE i, field2 TYPE i, END OF line. 这里的line,就相当于一个自定义的类型,表示一行(row)的字段(field). 这里一行有两个字段field1和field2. 然后是声明一个work area: DATA wa TYPE line. 我用C++(还是对cpp最有好感^^)的概念理解就是, line是一个class,而wa是一个object. 接着是声明一个每一行的类型是line的internal table: DATA itab TYPE line OCCURS 0. 我在暂时把OCCURS作为了区别工作区和内表的标志. OCCURS应该有更深层次的意义,但我目前只能领悟至此... 当我们用以上这个方法来声明一个iternal table时,可以选择是否有无header line. 上面这句就是没有header line的.改成如下就有了: DATA

【work】判断ip地址是否合法

瘦欲@ 提交于 2020-02-23 15:12:28
题目: 写一个程序输出以下ip列表(21.45.34.112,0.25.132.143,20.268.56.10)是否是合法的ip。(注:ip第一位不能为0,每一位不能超过255) 答案: #import <Foundation/Foundation.h> //创建一个判断iP是否合法的方法 int checkIP(const char* p) { //申明用来存放字符的两个数组,一个是存数字的,一个是存点的 int n[4]; char c[4]; //输入7位数格式的字符串,如果格式不对则返回值为0 if (sscanf(p, "%d%c%d%c%d%c%d", &n[0], &c[0], &n[1], &c[1], &n[2], &c[2], &n[3]) == 7) { //判断第一位是否为0 if (n[0]==0) return 0; //判断每一位是否超过255 int i; for(i = 0; i < 4; ++i) if (n[i] > 255 ) return 0; /*判断点格式是否正确,这部分题中没有要求,所以暂且注释掉 for(i = 0; i < 3; ++i) if (c[i] != '.') return 0;*/ //符合要求则返回值为1 return 1; } else return 0; } int main(int argc, const

Linux C 实现一个简单的线程池

痴心易碎 提交于 2020-02-23 12:54:38
线程池的定义 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。 什么时候需要创建线程池呢? 简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。 实现程序(未完成相关资源的释放操作) /******************** Pthread Pool 14/06/18 22:06 ********************/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h> #include <pthread.h> /* 任务节点结构 */

7、线程、进程、协程进阶篇

纵饮孤独 提交于 2020-02-22 15:08:09
1.1.继上一讲,知道了如何创建多线程和GIL的原理,接下来要说的是线程锁,那为什么需要线程锁呢? 先看下图,此图来自:http://www.cnblogs.com/alex3714/articles/5230609.html,我就不自己动手画了,比我画得好 分析: (1)线程1拿到count=0并获得GIL,依次执行1,2,3,4,5,然后执行时间到了释放GIL (2)线程2拿到count=0并获得GIL,依次执行6,7,8,9,10,11,修改count的值,此时count的值由0变成1,并释放GIL (3)线程1再次拿到GIL并继续执行12,13,修改count的值,count的值还是1 问题出现了:线程1和线程2都把count+1,但是最后count的值还是1 线程锁:cpu在执行任务时,在线程之间是进行随机调度的,并且每个线程在执行一段时间之后会切换到另外一个线程,但是由于线程之间堆数据是共享的,所以就会有可能出现上述问题。 没加锁时的代码: # -*- coding: utf-8 -*- #__author:jiangjing #date:2018/2/4 #!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time NUM = 0 def func(): global NUM

Python Scrapy环境配置教程+使用Scrapy爬取李毅吧内容

末鹿安然 提交于 2020-02-17 07:56:32
Python爬虫框架Scrapy Scrapy框架 1、Scrapy框架安装 直接通过这里安装scrapy会提示报错: error: Microsoft Visual C++ 14.0 is required <Unable to find vcvarsall.bat> building 'twisted test.raiser' extension error:Unable to find cyarsall.bat Failed building wheel for lxml 解决方法: 在 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 有很多用于windows的编译好的Python第三方库,我们下载好对应自己Python版本的库即可。 在cmd中输入指令python,查看python的版本,如下: 从上图可以看出可以看出我的Python版本为Python3.7.1-64bit。 登陆http://www.lfd.uci.edu/~gohlke/pythonlibs/,Ctrl+F搜索Lxml、Twisted、Scrapy,下载对应的版本,例如:lxml-3.7.3-cp35-cp35m-win_adm64.whl,表示lxml的版本为3.7.3,对应的python版本为3.5-64bit。我下载的版本如下图所示: 在cmd中输入DOS指令

HDU 4274 Spy\'s Work (树形DP)

泄露秘密 提交于 2020-02-16 12:17:45
题意 给定一棵树,给出一些子树的权值关系,问是否矛盾(初始所有结点的下限为1) 思路 设lmin和lmax表示题目给定的限制范围,默认为[1..oo];amin和amax表示实际符合要求的范围。从根节点开始DP,通过子树的amin更新父节点的amin(父节点的amax一定是oo,因为它自身权值任意),判断此时amin和amax与lmin和lmax是否有交集(实际范围),没有则false。 代码 [cpp] #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <string> #include <cstring> #include <vector> #include <set> #include <stack> #include <queue> #define MID(x,y) ((x+y)/2) #define MEM(a,b) memset(a,b,sizeof(a)) #define REP(i, begin, end) for (int i = begin; i <= end; i ++) using namespace std; const int N = 10005; const int oo = 0x7fffffff; long long lmin[N]

LeetCode——973. 最接近原点的 K 个点

这一生的挚爱 提交于 2020-02-16 11:01:47
我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例 1: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 sqrt(8) < sqrt(10),(-2, 2) 离原点更近。 我们只需要距离原点最近的 K = 1 个点,所以答案就是 [[-2,2]]。 示例 2: 输入:points = [[3,3],[5,-1],[-2,4]], K = 2 输出:[[3,3],[-2,4]] (答案 [[-2,4],[3,3]] 也会被接受。) 提示: 1 <= K <= points.length <= 10000 -10000 < points[i][0] < 10000 -10000 < points[i][1] < 10000 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/k-closest-points-to-origin 方法一:排序 思路 将所有点到原点的距离进行排序,然后输出距离最近的