Netty 通过Map管理用户Channel

有时候我们需要绑定用户id,让他们可以通过id与对方进行通信

通过Map实现一个简单的连接池

import io.netty.channel.socket.SocketChannel;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class GatewayService{
    private static Map map = new ConcurrentHashMap();

    public static void addGatewayChannel(String id, SocketChannel gateway_channel){
    map.put(id,gateway_channel);
    }

    public static Map getChannels(){
        return map;
    }

    public static SocketChannel getGatewayChannel(String id){
        return (SocketChannel)map.get(id);
    }

    public static void removeGatewayChannel(String id){
        map.remove(id);
    }
}

 

给phpstudy安装Memcached

Memcached是一款开源式的分布式缓存系统,Memcached 1.4.20为最新版本,适用于windows 64位和32位操作系统。Memcached 是性能的数据存储缓存工具,对于数据库庞大的服务器来说,使用Memcached 有效地减轻服务器的负担,提高服务的运行性能。

1.解压Memcached压缩包至拓展目录

2.安装/启动驱动即可

安装:

memcached -d install

memcached -d start

net start “Memcached Server”

卸载:

memcached -d stop

memcached -d remove

sc delete “Memcached Server”

memcached的基本设置:

-p 监听的端口

-l 连接的IP地址, 默认是本机

-d start 启动memcached服务

-d restart 重起memcached服务

-d stop|shutdown 关闭正在运行的memcached服务

-d install 安装memcached服务

-d uninstall 卸载memcached服务

-u 以的身份运行 (仅在以root运行的时候有效)

-m 最大内存使用,单位MB。默认64MB

-M 内存耗尽时返回错误,而不是删除项

-c 最大同时连接数,默认是1024

-f 块大小增长因子,默认是1.25

-n 最小分配空间,key+value+flags默认是48

-h 显示帮助

Python 实现数列求值

【问题描述】
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求
第 20190324 项的最后 4 位数字。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写多余的内容将无法得分。

def slqz(n):
    if n in [1,2,3]:
        return 1
    f1,f2,f3,fn=1,1,1,0
    for i in range(4,n+1):
        fn=(f1+f2+f3)%10000
        f1=f2
        f2=f3
        f3=fn
    return fn

print(slqz(20190324))

 

Python实现 字母图形

问题描述

利用字母可以组成一些美丽的图形,下面给出了一个例子:

ABCDEFG

BABCDEF

CBABCDE

DCBABCD

EDCBABC

这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定
1 <= n, m <= 26。
n,m = map(int,input().split(' '))
for i in range(n):
    for k in range(i):
        if k < m:
            print(chr(65-k+i),end="")
    for j in range(m-i):
        print(chr(j+65),end="")
    print("")

 

Python实现 斐波那契数列 取余

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

 

问题描述

Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。

说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。

样例输入
10
样例输出
55
样例输入
22
样例输出
7704
数据规模与约定
1 <= n <= 1,000,000。
def f(n):
    if n in [1,2]:
        return 1
    f1,f2,fn=1,1,0
    for i in range(3,n+1):
        fn = (f1+f2)%10007
        f1 = f2
        f2 = fn
    return fn

n = int(input())
print(f(n))

 

Python实现 找凶手 巴斯维克命案

巴斯维克命案抓住了六个嫌疑犯,他们的口供如下:
A:我不是罪犯
B:A、C中有一个是罪犯
C:A和B说了假话
D:C和F说了假话
E:其他五个人中,只有A和D说了真话
F:我是罪犯
他们中只有一半说了真话,凶手只有一个。
本题可能有多种可能性,即正确答案(找到唯一的凶手)可能有多个,但每一个可能的答案(某一个是凶手)都满足上述口供。
请编程找出可能的凶手输出。
(假设唯一的凶手是A或者D或者E,则输出结果为三行,按字母顺序依次输出)

def a():
    #我不是罪犯
    return people[0]!=1
def b():
    #A,C中有一个是罪犯
    return (people[0]==1 and people[2]==0) or (people[0]==0 and people[2]==1)
def c():
    #A和B说了假话
    return bool(1-a()) and bool(1-b())
def f():
    #我是罪犯
    return people[5]==1
def d():
    #C和F说了假话
    return bool(1-c()) and bool(1-f())
def e():
    #其他五个人中,只有A和D说了真话
    return a() and d() and bool(1-b()) and bool(1-c()) and bool(1-f())

people=[]
for i in range(6):
    count=0
    pc=""
    people.clear()
    for j in range(6):
        people.append(0)
    people[i] = 1

    if a()==True:
        count+=1
        pc+='a,'
    if b()==True:
        count+=1
        pc+='b,'
    if c()==True:
        count+=1
        pc+='c,'
    if d()==True:
        count+=1
        pc+='d,'
    if e()==True:
        count+=1
        pc+='e,'
    if f()==True:
        count+=1
        pc+='f,'
    if count==3:
        print(chr(65+i))

    #print(people)
    #print("排查%s,结果%s,排查项%s"%(str(i),str(count),str(pc)))

    

 

Python求特别数的和

样题2:特别数的和(编程大题)

【问题描述】

小明对数位中含有2、0、1、9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574。

请问,在 1 到 n 中,所有这样的数的和是多少?

【输入格式】

输入一行包含一个整数 n。

【输出格式】

输出一行,包含一个整数,表示满足条件的数的和。

【样例输入】

40

【样例输出】

574

while True:
    n=eval(input())
    count=0
    for i in range(1,n+1):
        for j in str(i):
            if j in ['2','0','1','9']:
                count+=i
                break
    print(count)

 

Python 实现矩形切割

样题1:矩形切割(结果填空题)

【问题描述】

小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。

当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。

例如,对于一块两边分别为5和3的材料(记为5×3),小明会依次切出3×3、2×2、1×1、1×1共4个正方形。

现在小明有一块矩形的材料,两边长分别是2019和324。请问小明最终会切出多少个正方形?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

说明:以上是问题描述的部分,选手做题时可以直接手算答案,即按照题目意思一步一步切割,最后得到切出的矩形个数,手算可能花费一些时间。如果选手在手算时使用除法等方式加快速度,时间可能少一些。如果选手编写程序来计算,可以减少手算中出现的失误。

本题答案为:21

while True:
    w,h=map(int,input().split(' '))
    count=0
    while True:
        if w>h:
            w-=h
            count+=1
        if w<h:
            h-=w
            count+=1
        elif w==h:
            count+=1
            w=h=0
        if w<=0 or h<=0:
            print(count)
            break