精华内容
下载资源
问答
  • Newlife.Redis 与 CsRedis:从始至终 均在初始阶段报异常. Newlife.Redis : 我看了是一个dynamic 一个属性问题.问题不大. 后面运行均稳定不报错的执行任务! CsRedis:从始至终都报异常,异常原因,初步判断是流程问题...
  • Qt下的OpenGL 编程(12)阶段学习总结

    千次阅读 2012-08-28 15:52:50
    学习OpenGL也有半个多月了,收获了很多,对3D的东西也有了初步的了解。  选用的平台是Ubuntu+Qt,因为为它非常的简单。  学到后面,其实更觉得学习的东西和平台是没有多大关系的,不管你是在windows下还是Linux...

            学习OpenGL也有半个多月了,收获了很多,对3D的东西也有了初步的了解。

            选用的平台是Ubuntu+Qt,因为为它非常的简单。

            学到后面,其实更觉得学习的东西和平台是没有多大关系的,不管你是在windows下还是Linux下,用VS还是QtCreater,重要的是实现你想要的东西,没必要找一个多么庞大的框架来实现只要几条语句就能实现的效果。

            在学习之处,这个系列的文章感觉最起码可以写到20篇的,要知道,NeHe的教程可是有将近50篇!但眼下只能写到这里了。原因,还是个人的时间 吧,这个月一直在学校学日语,上午是一天课,下午和晚上基本待在学校编程,晚上

    回去还要学日语(-_-!).  

         在学习前面一些基础的主题的时候,还是听轻松的,但到了后面的高级主题,我就得画上两三天也能理解其中的内容,并写出相应的代码,还是有挺多东西想去学习一下,比如碰撞,物理模拟,粒子等等。


         关于学习的方法

         我学习的资料主要是:红宝书,nehe的教程,还有CSDN的博客。

         nehe的教程最简单,只要稍微修改一下代码,程序就能跑起来,但理解起来有点吃力,这个时候就要去搜索了,csdn和opengl的文档都会有一些函数的解释,说明了函数的用法还有接口,但如果要深入理解其中的原理的话,红宝书是必不可少的。

         接下来可能会将重心转移到Android了,有时间的话我会继续学习OpenGL es,那个相信会更有意思。


    展开全文
  • 项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的...

    项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的生成逻辑至关重要,主要和A、B、C 三大因素有关,大概如下:

    1、同A,不管后面的B,C是否不一致
    首先根据传入消息的A ,到ES中查询 如果存在相同的则用原A的设备ID(DeviceID)
    2、不同A
    1)B一样,C不一样,则用原B的设备ID(DeviceID)
    2)C一样,B不一样,则用原C的设备ID(DeviceID)
    3)B不一样,C不一样,则生成新设备ID(DeviceID),生成新的设备ID的逻是原来的最大的设备ID号,加1最为新的设备ID,例如:原数据中最大设备ID是D000000009,则新的设备ID是D000000010.

    设备ID的生成在数据量大并发的情况下是非常有可能是同一时间过来的,所以,当开启脚本后,即使是A、B、C因子都不一样的时候,因为生成时间是相同的(精确到毫秒级),所以生成的设备ID还是相同的(实际情况下是不可能生成相同设备的),此问题的解决方案有很多,可以搜索,分布式ID的生成,我们开发采取的方案是使用redis的原子性,ID生成器解决的。主要的locust脚本如下:

    #!/user/bin/env python
    #coding=utf-8
    author = 'zengweifang'

    #风控系统的压测脚本
    #第一步:模拟设备指纹的100万数据的生成

    from locust import HttpLocust,TaskSet,task
    import queue
    import json
    import requests
    from random import Random
    import random
    import time
    import string
    import socket
    import struct

    RockMQ = "http://192.168.46.154:8765/topic/sendTopicMessage.do"

    def AutoGeneratedString(number):
    '''随机生成字符串方法,主要用于输入框不能超过多少字符串的场景,此一次性产生的最大的字符串是62个'''
    return ''.join(random.sample(string.ascii_letters + string.digits, number))

    def getRandomBool():
    '''随机获取是否是代理'''
    isProxy = ["true","false"]
    return random.sample(isProxy, 1)[0]

    def get_random_ip():
    '''随机生成合法的IP'''
    RANDOM_IP_POOL=['192.168.10.222/0']
    str_ip = RANDOM_IP_POOL[random.randint(0,len(RANDOM_IP_POOL) - 1)]
    str_ip_addr = str_ip.split('/')[0]
    str_ip_mask = str_ip.split('/')[1]
    ip_addr = struct.unpack('>I',socket.inet_aton(str_ip_addr))[0]
    mask = 0x0
    for i in range(31, 31 - int(str_ip_mask), -1):
    mask = mask | ( 1 << i)
    ip_addr_min = ip_addr & (mask & 0xffffffff)
    ip_addr_max = ip_addr | (~mask & 0xffffffff)
    return socket.inet_ntoa(struct.pack('>I', random.randint(ip_addr_min, ip_addr_max)))

    def getUnixTime():
    '''获得13位的unix时间戳:1519800472673'''
    return int(round(time.time() * 1000))

    def getPCUserAgent():
    '''获取PC端的UserAgent'''
    pc_user_agent = [
    'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
    'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
    'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0',
    'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1',
    'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)',
    'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
    'Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
    'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
    'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)']
    list(set(pc_user_agent))
    return random.sample(pc_user_agent, 1)[0]

    def messageDict(fingerId, sessionId):

    topic = {"topic": "meta-fingerprint"}
    tag = {"tag": ""}
    key = {"key": ""}
    
    appId = {"appId": 'A10007'}
    clientType = {"clientType": "1"}
    fingerId = {"fingerId": fingerId}
    ip = {"ip": get_random_ip()}
    proxyFlag = {"proxyFlag": getRandomBool()}
    sessionId = {"sessionId": sessionId}
    systemId = {"systemId": '7b6a99f3bce14915863cde5104bdf2c3'}
    timestamp = {"timestamp": str(getUnixTime())}
    
    user_agent = '{\"key\":\"user_agent\",\"value\":\"%s\"}' % getPCUserAgent()
    language = '{\"key\":\"language\",\"value\":\"zh-cn\"}'
    color_depth = '{\"key\":\"color_depth\",\"value\":32}'
    device_memory = '{\"key\":\"device_memory\",\"value\":-1}'
    pixel_ratio = '{\"key\":\"pixel_ratio\",\"value\":\"\"}'
    hardware_concurrency = '{\"key\":\"hardware_concurrency\",\"value\":\"unknown\"}'
    resolution = '{\"key\":\"resolution\",\"value\":[1920,1080]}'
    available_resolution = '{\"key\":\"available_resolution\",\"value\":[1920,1040]}'
    timezone_offset = '{\"key\":\"timezone_offset\",\"value\":-480}'
    session_storage = '{\"key\":\"session_storage\",\"value\":1}'
    local_storage = '{\"key\":\"local_storage\",\"value\":1}'
    add_behavior = '{\"key\":\"add_behavior\",\"value\":1}'
    cpu_class = '{\"key\":\"cpu_class\",\"value\":\"x86\"}'
    navigator_platform = '{\"key\":\"navigator_platform\",\"value\":\"Win32\"}'
    do_not_track = '{\"key\":\"do_not_track\",\"value\":\"unknown\"}'
    ie_plugins = '{\"key\":\"ie_plugins\",\"value\":[\"AcroPDF.PDF\",null,null,null,\"MacromediaFlashPaper.MacromediaFlashPaper\",\"Msxml2.DOMDocument\",\"Msxml2.XMLHTTP\",null,null,null,null,null,null,\"Scripting.Dictionary\",null,\"Shell.UIHelper\",\"ShockwaveFlash.ShockwaveFlash\",null,\"TDCCtl.TDCCtl\",\"WMPlayer.OCX\",null,null]}'
    adblock = '{\"key\":\"adblock\",\"value\":false}'
    has_lied_languages = '{\"key\":\"has_lied_languages\",\"value\":false}'
    has_lied_resolution = '{\"key\":\"has_lied_resolution\",\"value\":false}'
    has_lied_os = '{\"key\":\"has_lied_os\",\"value\":false}'
    has_lied_browser = '{\"key\":\"has_lied_browser\",\"value\":false}'
    touch_support = '{\"key\":\"touch_support\",\"value\":[0,false,false]}'
    js_fonts = '{\"key\":\"js_fonts\",\"value\":[\"Arial\",\"Arial Black\",\"Calibri\",\"Cambria\",\"Cambria Math\",\"Comic Sans MS\",\"Consolas\",\"Courier\",\"Courier New\",\"Georgia\",\"Helvetica\",\"Impact\",\"Lucida Console\",\"Lucida Sans Unicode\",\"Microsoft Sans Serif\",\"MS Gothic\",\"MS PGothic\",\"MS Sans Serif\",\"MS Serif\",\"Palatino Linotype\",\"Segoe Print\",\"Segoe Script\",\"Segoe UI\",\"Segoe UI Light\",\"Segoe UI Semibold\",\"Segoe UI Symbol\",\"Tahoma\",\"Times\",\"Times New Roman\",\"Trebuchet MS\",\"Verdana\",\"Wingdings\"]}'
    
    fingerParametersList = [user_agent, language, color_depth, device_memory, pixel_ratio, hardware_concurrency,
                                resolution, available_resolution, timezone_offset,
                                session_storage, local_storage, add_behavior, cpu_class, navigator_platform,
                                do_not_track, ie_plugins, adblock, has_lied_languages,
                                has_lied_resolution, has_lied_os, has_lied_browser, touch_support, js_fonts]
    
    fingerParameters = {"fingerParameters": str(fingerParametersList)}

    {"messageBody":fingerParameters}
    messageBodyDict = fingerParameters.copy()
    messageBodyDict.update(clientType)
    messageBodyDict.update(fingerId)
    messageBodyDict.update(ip)
    messageBodyDict.update(proxyFlag)
    messageBodyDict.update(sessionId)
    messageBodyDict.update(systemId)
    messageBodyDict.update(timestamp)
    messageBodyDict.update(appId)

    messageBody = {"messageBody": str(messageBodyDict)}
        # print(messageBody)
    
    NewmessageBody = messageBody.copy()
    NewmessageBody.update(topic)
    NewmessageBody.update(tag)
    NewmessageBody.update(key)
    
    return NewmessageBody

    def toJson(message):
    return json.dumps(message, ensure_ascii=False)

    def send(url, jsonbody, header):
    print('发送的消息体为:%s' % jsonbody)
    re = requests.post(url=url, data=jsonbody, headers=header).json()
    return re

    def getHeader():
    '''获取请求头'''
    header = {"Content-Type": "application/json"}
    return header

    class rcpTaskSet(TaskSet):

    @task(1)
    def fingerprint(self):
        '''生产设备指纹'''
        try:
            sessionId_data = self.locust.sessionId_queue.get()
            print(sessionId_data)
        except queue.Empty:
            print('sessionId data run out, test ended.')
            exit(0)
    
        try:
            fingerId_data = self.locust.fingerId_queue.get()
            print(fingerId_data)
        except queue.Empty:
            print('fingerId data run out, test ended.')
            exit(0)
    
        #self.messageDict(fingerId_data,sessionId_data)
        json1 = toJson(messageDict(fingerId_data,sessionId_data))
        send(RockMQ, json1, getHeader())
    
        #保证并发测试数据唯一性,循环取数据
        self.locust.sessionId_queue.put_nowait(sessionId_data)
        self.locust.fingerId_queue.put_nowait(fingerId_data)
    
        # payload = FG.messageDict( sessionId)
        # json1 = FG.toJson(payload)
        # self.send(self.RockMQ, json1, self.getHeader())
    
    # @task
    # def sendMQ(self):
    #     '''发送消息'''
    #     pass

    class rcpLocust(HttpLocust):

    task_set = rcpTaskSet
    
    sessionId_queue = queue.Queue()
    
    for a in range(1000000):
        sessionId = AutoGeneratedString(32)
        sessionId_queue.put_nowait(sessionId)
    
    fingerId_queue = queue.Queue()
    for b in range(1000000):
        fingerId = AutoGeneratedString(32)
        fingerId_queue.put_nowait(fingerId)
    
    min_wait = 1000
    max_wait = 3000

    找到locust脚本,启动方式如下:
    locust -H http://192.168.46.154:8765/topic/sendTopicMessage.do -f rcpLocust.py

    最后在web上设置用户数和每秒加载的用户,done

    转载于:https://blog.51cto.com/11565901/2107163

    展开全文
  • 项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的...

    项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的生成逻辑至关重要,主要和A、B、C 三大因素有关,大概如下:

    1、同A,不管后面的B,C是否不一致

    首先根据传入消息的A ,到ES中查询 如果存在相同的则用原A的设备ID(DeviceID)

    2、不同A

    1)B一样,C不一样,则用原B的设备ID(DeviceID)

    2)C一样,B不一样,则用原C的设备ID(DeviceID)

    3)B不一样,C不一样,则生成新设备ID(DeviceID),生成新的设备ID的逻是原来的最大的设备ID号,加1最为新的设备ID,例如:原数据中最大设备ID是D000000009,则新的设备ID是D000000010.

    设备ID的生成在数据量大并发的情况下是非常有可能是同一时间过来的,所以,当开启脚本后,即使是A、B、C因子都不一样的时候,因为生成时间是相同的(精确到毫秒级),所以生成的设备ID还是相同的(实际情况下是不可能生成相同设备的),此问题的解决方案有很多,可以搜索,分布式ID的生成,我们开发采取的方案是使用redis的原子性,ID生成器解决的。主要的locust脚本如下:

    #!/user/bin/env python

    #coding=utf-8

    author = ‘zengweifang‘

    #风控系统的压测脚本

    #第一步:模拟设备指纹的100万数据的生成

    from locust import HttpLocust,TaskSet,task

    import queue

    import json

    import requests

    from random import Random

    import random

    import time

    import string

    import socket

    import struct

    def AutoGeneratedString(number):

    ‘‘‘随机生成字符串方法,主要用于输入框不能超过多少字符串的场景,此一次性产生的最大的字符串是62个‘‘‘

    return ‘‘.join(random.sample(string.ascii_letters + string.digits, number))

    def getRandomBool():

    ‘‘‘随机获取是否是代理‘‘‘

    isProxy = ["true","false"]

    return random.sample(isProxy, 1)[0]

    def get_random_ip():

    ‘‘‘随机生成合法的IP‘‘‘

    RANDOM_IP_POOL=[‘192.168.10.222/0‘]

    str_ip = RANDOM_IP_POOL[random.randint(0,len(RANDOM_IP_POOL) - 1)]

    str_ip_addr = str_ip.split(‘/‘)[0]

    str_ip_mask = str_ip.split(‘/‘)[1]

    ip_addr = struct.unpack(‘>I‘,socket.inet_aton(str_ip_addr))[0]

    mask = 0x0

    for i in range(31, 31 - int(str_ip_mask), -1):

    mask = mask | ( 1 << i)

    ip_addr_min = ip_addr & (mask & 0xffffffff)

    ip_addr_max = ip_addr | (~mask & 0xffffffff)

    return socket.inet_ntoa(struct.pack(‘>I‘, random.randint(ip_addr_min, ip_addr_max)))

    def getUnixTime():

    ‘‘‘获得13位的unix时间戳:1519800472673‘‘‘

    return int(round(time.time() * 1000))

    def getPCUserAgent():

    ‘‘‘获取PC端的UserAgent‘‘‘

    pc_user_agent = [

    ‘Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50‘,

    ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50‘,

    ‘Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0‘,

    ‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0‘,

    ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0‘,

    ‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1‘,

    ‘Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)‘,

    ‘Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko‘,

    ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1‘,

    ‘Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1‘,

    ‘Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11‘,

    ‘Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11‘,

    ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11‘,

    ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)‘,

    ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)‘,

    ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)‘,

    ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)‘,

    ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)‘,

    ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)‘,

    ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)‘,

    ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)‘]

    list(set(pc_user_agent))

    return random.sample(pc_user_agent, 1)[0]

    def messageDict(fingerId, sessionId):

    topic = {"topic": "meta-fingerprint"}

    tag = {"tag": ""}

    key = {"key": ""}

    appId = {"appId": ‘A10007‘}

    clientType = {"clientType": "1"}

    fingerId = {"fingerId": fingerId}

    ip = {"ip": get_random_ip()}

    proxyFlag = {"proxyFlag": getRandomBool()}

    sessionId = {"sessionId": sessionId}

    systemId = {"systemId": ‘7b6a99f3bce14915863cde5104bdf2c3‘}

    timestamp = {"timestamp": str(getUnixTime())}

    user_agent = ‘{\"key\":\"user_agent\",\"value\":\"%s\"}‘ % getPCUserAgent()

    language = ‘{\"key\":\"language\",\"value\":\"zh-cn\"}‘

    color_depth = ‘{\"key\":\"color_depth\",\"value\":32}‘

    device_memory = ‘{\"key\":\"device_memory\",\"value\":-1}‘

    pixel_ratio = ‘{\"key\":\"pixel_ratio\",\"value\":\"\"}‘

    hardware_concurrency = ‘{\"key\":\"hardware_concurrency\",\"value\":\"unknown\"}‘

    resolution = ‘{\"key\":\"resolution\",\"value\":[1920,1080]}‘

    available_resolution = ‘{\"key\":\"available_resolution\",\"value\":[1920,1040]}‘

    timezone_offset = ‘{\"key\":\"timezone_offset\",\"value\":-480}‘

    session_storage = ‘{\"key\":\"session_storage\",\"value\":1}‘

    local_storage = ‘{\"key\":\"local_storage\",\"value\":1}‘

    add_behavior = ‘{\"key\":\"add_behavior\",\"value\":1}‘

    cpu_class = ‘{\"key\":\"cpu_class\",\"value\":\"x86\"}‘

    navigator_platform = ‘{\"key\":\"navigator_platform\",\"value\":\"Win32\"}‘

    do_not_track = ‘{\"key\":\"do_not_track\",\"value\":\"unknown\"}‘

    ie_plugins = ‘{\"key\":\"ie_plugins\",\"value\":[\"AcroPDF.PDF\",null,null,null,\"MacromediaFlashPaper.MacromediaFlashPaper\",\"Msxml2.DOMDocument\",\"Msxml2.XMLHTTP\",null,null,null,null,null,null,\"Scripting.Dictionary\",null,\"Shell.UIHelper\",\"ShockwaveFlash.ShockwaveFlash\",null,\"TDCCtl.TDCCtl\",\"WMPlayer.OCX\",null,null]}‘

    adblock = ‘{\"key\":\"adblock\",\"value\":false}‘

    has_lied_languages = ‘{\"key\":\"has_lied_languages\",\"value\":false}‘

    has_lied_resolution = ‘{\"key\":\"has_lied_resolution\",\"value\":false}‘

    has_lied_os = ‘{\"key\":\"has_lied_os\",\"value\":false}‘

    has_lied_browser = ‘{\"key\":\"has_lied_browser\",\"value\":false}‘

    touch_support = ‘{\"key\":\"touch_support\",\"value\":[0,false,false]}‘

    js_fonts = ‘{\"key\":\"js_fonts\",\"value\":[\"Arial\",\"Arial Black\",\"Calibri\",\"Cambria\",\"Cambria Math\",\"Comic Sans MS\",\"Consolas\",\"Courier\",\"Courier New\",\"Georgia\",\"Helvetica\",\"Impact\",\"Lucida Console\",\"Lucida Sans Unicode\",\"Microsoft Sans Serif\",\"MS Gothic\",\"MS PGothic\",\"MS Sans Serif\",\"MS Serif\",\"Palatino Linotype\",\"Segoe Print\",\"Segoe Script\",\"Segoe UI\",\"Segoe UI Light\",\"Segoe UI Semibold\",\"Segoe UI Symbol\",\"Tahoma\",\"Times\",\"Times New Roman\",\"Trebuchet MS\",\"Verdana\",\"Wingdings\"]}‘

    fingerParametersList = [user_agent, language, color_depth, device_memory, pixel_ratio, hardware_concurrency,

    resolution, available_resolution, timezone_offset,

    session_storage, local_storage, add_behavior, cpu_class, navigator_platform,

    do_not_track, ie_plugins, adblock, has_lied_languages,

    has_lied_resolution, has_lied_os, has_lied_browser, touch_support, js_fonts]

    fingerParameters = {"fingerParameters": str(fingerParametersList)}

    {"messageBody":fingerParameters}

    messageBodyDict = fingerParameters.copy()

    messageBodyDict.update(clientType)

    messageBodyDict.update(fingerId)

    messageBodyDict.update(ip)

    messageBodyDict.update(proxyFlag)

    messageBodyDict.update(sessionId)

    messageBodyDict.update(systemId)

    messageBodyDict.update(timestamp)

    messageBodyDict.update(appId)

    messageBody = {"messageBody": str(messageBodyDict)}

    # print(messageBody)

    NewmessageBody = messageBody.copy()

    NewmessageBody.update(topic)

    NewmessageBody.update(tag)

    NewmessageBody.update(key)

    return NewmessageBody

    def toJson(message):

    return json.dumps(message, ensure_ascii=False)

    def send(url, jsonbody, header):

    print(‘发送的消息体为:%s‘ % jsonbody)

    re = requests.post(url=url, data=jsonbody, headers=header).json()

    return re

    def getHeader():

    ‘‘‘获取请求头‘‘‘

    header = {"Content-Type": "application/json"}

    return header

    class rcpTaskSet(TaskSet):

    @task(1)

    def fingerprint(self):

    ‘‘‘生产设备指纹‘‘‘

    try:

    sessionId_data = self.locust.sessionId_queue.get()

    print(sessionId_data)

    except queue.Empty:

    print(‘sessionId data run out, test ended.‘)

    exit(0)

    try:

    fingerId_data = self.locust.fingerId_queue.get()

    print(fingerId_data)

    except queue.Empty:

    print(‘fingerId data run out, test ended.‘)

    exit(0)

    #self.messageDict(fingerId_data,sessionId_data)

    json1 = toJson(messageDict(fingerId_data,sessionId_data))

    send(RockMQ, json1, getHeader())

    #保证并发测试数据唯一性,循环取数据

    self.locust.sessionId_queue.put_nowait(sessionId_data)

    self.locust.fingerId_queue.put_nowait(fingerId_data)

    # payload = FG.messageDict( sessionId)

    # json1 = FG.toJson(payload)

    # self.send(self.RockMQ, json1, self.getHeader())

    # @task

    # def sendMQ(self):

    # ‘‘‘发送消息‘‘‘

    # pass

    class rcpLocust(HttpLocust):

    task_set = rcpTaskSet

    sessionId_queue = queue.Queue()

    for a in range(1000000):

    sessionId = AutoGeneratedString(32)

    sessionId_queue.put_nowait(sessionId)

    fingerId_queue = queue.Queue()

    for b in range(1000000):

    fingerId = AutoGeneratedString(32)

    fingerId_queue.put_nowait(fingerId)

    min_wait = 1000

    max_wait = 3000

    展开全文
  • 博主现在是一名大二的学生,最近正在自学stm32单片机(正点原子 战舰版本),搞了大约三天了,对stm32有了初步的认识和了解,对GPIO的输入输出也有了自己的了解与看法,特此整理。 首先学习了GPIO的输入与输出后,...

    博主现在是一名大二的学生,最近正在自学stm32单片机(正点原子 战舰版本),搞了大约三天了,对stm32有了初步的认识和了解,对GPIO的输入输出也有了自己的了解与看法,特此整理。

    首先学习了GPIO的输入与输出后,本人对C语言中的头文件(。h)和源文件(.c)有了进一步的认识,总结一下:头文件就是用来定义的,包括定义函数名,定义变量,一般格式为:当然 后面可以用到的,我感觉都可以提前在头文件中定义,对于源文件,它实现的就是头文件中所定义的函数写完整,因此,我们在写源文件时必须把其头文件包含进去
    1,关于GPIO的输出,博主用的是正点原子的战舰版,对于战舰版,它为我们提供了诸多已经定义好的函数,首先在,对于一般外设,我们都会先建立一个文件夹,在文件夹下建立其对应的头文件和源文件,同时将头文件添加到文件夹下,将路径也添加到对应文件夹下,头文件为了防止重复定义采用: #ifndef…#endif,中间进行变量或函数的定义声明,例如(拿按LED举例:)在这里插入图片描述
    注::一般在头文件我们都会包含 sys.h,这一文件。

    之后我们再去源文件,将我们定义的函数功能写完整,以为要使用stm32的I/o口,首先我们应当先打开对应的时钟,即:(时钟调用函数)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
    这里要说明对于stm32 I/O口的初始化,其I/O口包含3个属性:1端口设置(配置为那个端口),2模式设置(输入还是输出),3 I/O口速度设置,stm32 为我们提供了初始化I/O口的函数:GPIO-Init(GPIOx,&GPIO_InitStructure),因此我们数显需要去建立一个结构体GPIO_InitStructure,其下包含以上三个属性,属性值可以查阅stm32f10x.h文件来复制粘贴即可,设置完成将I/O口初始化:
    在这里插入图片描述
    当以上工作都完成之后我们便可以在main()函数中将其包含其头文件并调用函数完成I/O口的输出了。

    相比于I/O口的输入其流程跟输出基本类似,只要将初始化I/o口的模式更改一下即可,同时,在main()函数写下代码就可以输入了。

    备注:初学stm32,文中可能表述不是很规范,如若有错,欢迎大佬提出,不喜勿喷。

    展开全文
  • 项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的...
  • 经过上次的思考,我决定先进行一个初步的类设计,这样能为后面的开发带来不少方便,就好比有了图纸,设计的时候要小心,尽量避免漏洞,尤其是重大设计漏洞。 正题 下面的图就是我目前设计的类图,展示了目前用到的...
  • 同时重点讲解了视图和展开图等知识点,而后面学习的线,角等知识点,则更多地为初中阶段以后的学习打下基础,作为几何图形初步,立体图形的三视图和展开图相关类型的题型还是非常重要的,也是这部分的难点之一。...
  • 商品简介三年级是小学阶段很重要的转折期,对孩子的后面的学习有很大的影响。三年级是从被动的学习主体向主动的学习主体转变的时期,三年级后的考试不是仅仅考课内的知识了,这就要求孩子在课外要大量地汲取知识,...
  • 软件开发需求分析的要点

    千次阅读 2009-03-22 23:34:00
    闲来没事,总结了几点需求分析即设计的初步阶段的要点:1.初步模型图 对即将展开需求分析的实际建立个大概的模型,这阶段的可以不求详实,也可以不正确,在后面的几个阶段逐渐作增补。“不打无准备之仗”。
  • 如国这一阶段没有打好基础,后面去无论是做题还是进行实战都会感觉很吃力。 所以从今天开始,我们python学习开始由简入深,初步进入深入阶段。所以,我们进入正题。 1.对象和类认识和基础应用 计算机语言分为 ...
  • 工作小记(四)

    2018-03-25 21:07:34
    比较忙碌的一周,之前在视频里找人脸 区分表情,截取表情片段可以初步的实现。win+python+dlib 环境配置方面 一句话总结:坎坎坷坷全是坑。。。。后面准备改进算法思想,逐渐提高表情片段的准确性 连续性。在人脸...
  • 项目立项前就已经进行了初步的项目范围规划。项目范围的管理直接决定项目日后的实施,决定项目能否成功。 项目范围管理包括了范围规划、范围定义、工作结构分解、范围控制。这基本是顺序进行的,但后面的工作又可能...
  • 【问题】INSERT语句是最常见的SQL语句之一,最近有台MySQL服务器不定时的会出现并发线程...log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题后面开启线程上升时pstack的自动采集,定...
  • 【问题】INSERT语句是最常见的SQL语句之一,最近有台MySQL服务器不定时的会出现并发线程...log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题后面开启线程上升时pstack的自动采集,定...
  • 【问题】INSERT语句是最常见的SQL语句之一,最近有台MySQL服务器不定时的会出现并发线程...log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题后面开启线程上升时pstack的自动采集,定...
  • 【问题】 有台MySQL服务器不定时...从等待资源来看,大部分时间消耗在了innodb_log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题 后面开启线程上升时pstack的自动采集,定位MySQ...
  • 有台 MySQL 服务器不定时的会出现并发线程的告警,从记录信息来看,有大量insert的慢查询,执行几十秒,等待flushing log,状态query end 【初步分析】从等待资源来看,大部分时间消耗在了innodb_log_file阶段,...
  • 原文:MySQL大事务导致的Insert慢的案例分析【问题】有台MySQL服务器...大部分时间消耗在了innodb_log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题后面开启线程上升时pstack的自动采...
  • 有台MySQL服务器不定时的会出现并发线程的告警,从记录信息来看,有大量insert的慢查询,执行几十秒,等待flushing log,状态query end【初步分析】从等待资源来看,大部分时间消耗在了innodb_log_file阶段,...
  • 从等待资源来看,大部分时间消耗在了innodb_log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题 后面开启线程上升时pstack的自动采集,定位MySQL线程等待的位置。 【分析过程】 部署了...
  • 今天第一次初步尝试安卓环境搭建,然后下了一个android的SDK manager,按照官网上的教程进行环境包下载,可是一直卡了xml的fetching阶段,偶尔几次通过了下载速度才只有几KB,更是无奈。 后面解决方法如下: 在C:\...
  • 上一章,我们已经将大部分的布局和控件,以及控件的属性都在xml中操作了,对布局和控件已经有了初步的了解,后面就是在学习和项目中去加深和完善了,使用多了自然就会熟练的。 下面进入界面开发的下一阶段。 前面...
  • 快乐分享错了就成了显摆,难过...而后的空头转换中,给出的位置均是比较精髓的,像27、40以及45,在初次试探时均面临了一定的下跌修正,给出的拐点有效,无效的是后面阶段的下跌中,未能按照初步预期进行走低,更多的是
  • 通过后面这几个月对于卷积神经网络有一些心得,由于是初步了解,可能说的有些不全面或者不完善的地方,望谅解。 1.卷积网络入门其实没有想象的那么难,但是越往高处走越来越需要我们去细心琢磨。 2.在卷积神经网络中...
  • 美食网站设计需求分析是介于系统分析和软件设计阶段之间的桥梁。一方面,需求分析以系统规格说明和项目规划作为分析活动的基本出发点,并从软件角度对它们进行检查与调整;另一方面,需求规格说明又是软件设计、实现...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

初步阶段后面是