• 我有一个朋友 at 2024年02月23日

    为啥要赔一年的服务费,转正的工资,也是从签订正式合同开始计算啊。我们公司有个开发转正式,没听说还要赔服务费的。

  • 仅楼主可见
  • MQTT 协议是个啥? at 2024年02月22日

    在 MQTT 协议中,发布者和订阅者都被视为客户端,它们都可以连接到 MQTT Broker 并与之交互。

    发布者(Publisher):这是发送消息到 MQTT Broker 的客户端。它负责将数据或信息发送到特定的 topic 上。发布者可以是任何设备、软件或服务,只要它能够建立与 Broker 的连接并发送消息。例如,一个温度传感器可能是一个发布者,它定期将其读取的温度数据发布到 Broker。

    订阅者(Subscriber):这是从 MQTT Broker 接收消息的客户端。它订阅了一个或多个 topic,以便从 Broker 接收与这些 topic 匹配的消息。订阅者可以是任何需要接收和处理这些消息的设备、软件或服务。例如,一个手机应用程序可能是一个订阅者,它订阅了与用户相关的 topic,以便在收到新消息时更新用户界面。

    MQTT Broker:它是消息的中转站,负责接收来自发布者的消息,并根据订阅者的订阅信息将消息转发给相应的订阅者。Broker 确保消息能够准确、可靠地传输,并提供一些额外的功能,如消息持久化、QoS 保证等。

    所以,简单来说,发布者和订阅者都是连接到 MQTT Broker 的客户端,只是它们的功能不同:一个负责发送消息,另一个负责接收消息。而 MQTT Broker 则是它们之间的中介,负责消息的路由和传输。

  • 原来如此,等看看落地实际效果

  • 开工大吉!!! at 2024年02月18日

    开工大吉,收入翻倍,奖金多多。

  • 期待后续的教程,看看具体可以应用在哪些地方

  • 仅楼主可见
  • CHATGPT 答复的比我全面

    1. 确定专利类型

      • 发明专利:适用于新的产品、方法或改进。
      • 实用新型专利:主要用于产品的形状、构造或者其结合所提出的适合实用的新的技术方案。
      • 外观设计专利:针对产品的形状、图案、色彩或者其组合做出富有美感并适于工业应用的新设计。
    2. 准备内容

      • 标题:简短明确地反映发明的主题。
      • 技术领域:说明本发明所属的技术领域或行业背景。
      • 背景技术:介绍现有技术的状态,指出存在的问题或不足之处。
      • 发明内容
        • 技术方案:详细描述发明的具体内容,包括组成结构、工作原理、实现过程等,并配合附图进行说明。
        • 有益效果:阐述本发明相比于现有技术带来的显著进步或优点。
      • 实施方式:给出具体实施例,详述发明如何实施及操作流程,并通过附图说明结构或方法步骤。
      • 权利要求书:精确限定保护范围,各个权利要求应清楚、简要、完整且彼此独立,从上到下逐渐细化。
    3. 格式规范

      • 严格按照专利局的规定使用字体、字号、行距、段落缩进等格式要求。
      • 图形部分需清晰、准确,使用绘图软件绘制总装、部件和零件结构图,并确保附图与说明书文字对应。
    4. 注意事项

      • 突出新颖性、创造性和实用性,这是获得专利授权的重要条件。
      • 权利要求应当具有足够的宽窄度,在保护发明的同时避免过宽被无效或过窄无法覆盖实际应用。
      • 参考相关文献和已授权专利,确保发明的独特性和合法性。
    5. 审查过程中的策略

      • 在撰写过程中考虑审查员可能关注的问题点,尤其是发明的创新点以及区别于现有技术的特点。
      • 针对有益效果做充分说明,有助于审查意见答复和后期可能的无效程序。
    6. 寻求专业帮助

      • 如果是初次撰写,建议咨询专利代理人或专利律师,他们有丰富的经验和专业知识,能够协助完成高质量的专利申请文件。
  • 分析的很有道理

  • 建筑设备制造业

  • 主动或者被动跳槽,看到有合适的企业招聘合适的岗位,投递简历即可

  • 仅楼主可见
  • 称呼媳妇为【大哥】,一声大哥,一生大哥。
    这句话,写的太好了,令人感动。

  • 8 号,提前休假

  • @ZhouYixun 感谢 Sonic 提供了这么一个功能强悍的云真机平台。
    反馈 2 个问题:
    1、同事把手机拔了,手机还是显示在线中,后来我远程重启手机,状态才变成了离线。
    2、新增手机设备的时候,不能立刻就显示出来,页面刷了好几次也不行,后来重新执行了 java -Dfile.encoding=utf-8 -jar sonic-agent-windows-x86_64.jar,才显示了新增的设备。

  • 1 at 2024年02月04日

    哈哈,技术群真实状态。

  • 对于较小的数据规模(如您提供的几个键的情况),使用列表或集合在any()函数内部进行成员资格测试,性能差异通常并不显著。但如果要对比在大规模数据下哪种方式更高效:

    • 集合(set):在 Python 中,集合的成员查找操作具有 O(1) 的时间复杂度,这意味着无论集合有多大,查找一个元素所需的时间基本是恒定的。

    • 列表(list):列表的成员查找操作平均时间复杂度为 O(n),即如果列表很大,查找特定元素可能需要遍历整个列表。

    因此,在处理大量数据时,如果关注效率和性能优化,使用集合会更加高效。但是,对于只有少量固定键值需要检查的情况,使用列表也不会造成明显的性能瓶颈。在您的代码片段中,因为涉及的键数量很少,所以选择列表还是集合对整体程序执行效率影响不大。

  • 这种效率高:any(key in result.keys() for key in {'IOTregist', 'lift', 'loginName', 'beginTime'})

  • 只有测试背锅? at 2024年01月30日

    测试领导明显不懂业务逻辑,怎么能附和开发和运维的思维,自己揽责任。
    重启问题应该是开发自己做的不到位,和测试有什么关系,自己考虑不全,测试负责的是基本功能回归,不负责线上的运维服务,由于服务流程和部署问题导致的问题,不属于测试问题。
    需要明确责任边界,为啥没有重启,为啥发布之前没有考虑到,是什么原因? 有没有提醒过测试,需要做重启后的验证?发布之前有没有影响范围的说明?

  • 笑死我了,哈哈哈,大活宝😀

  • 学习了,先收藏一下

  • 闰年相关风险如何排查? at 2024年01月19日

    处理闰年时间相关的问题在软件开发中是常见的,特别是在处理日期、时间计算以及有效期管理时。密钥缓存时间计算错误如果与闰年有关,可能是因为程序未能正确处理 2 月的天数变化或者在进行日期递增或递减时没有考虑到闰年的规则。

    以下是一些排查和预防闰年相关风险的步骤:

    1. 代码审查

      • 对涉及日期计算、有效期管理和缓存逻辑的代码进行详细审查,确保在处理 2 月份日期时考虑到了闰年的情况。
      • 检查所有使用到java.util.Calendarjava.time.LocalDate(Java 8 及以上版本)或类似日期类的地方,确保它们自动处理了闰年。
    2. 单元测试

      • 设计并执行针对闰年的边界条件测试,包括但不限于:
        • 平年 2 月底至闰年 2 月初的缓存失效问题。
        • 闰年 2 月 29 日相关的特殊场景,如密钥在这一天过期后是否能在 3 月 1 日正常更新等。
    3. 集成测试

      • 使用历史上的闰年日期数据作为输入来模拟实际环境中的情况,比如 2000 年、2004 年、2012 年和 2020 年等。
      • 如果产品有 API 接口,可以通过伪造请求头中的日期来进行跨年测试,模拟不同客户端系统时间对服务器缓存的影响。
    4. 工具辅助

      • 利用持续集成/持续部署(CI/CD)流程中的自动化测试工具,编写脚本生成各种边界条件和极端情况下的测试用例,覆盖闰年及非闰年的转换点。
    5. 设计改进

      • 考虑重构代码以抽象出一个统一的日期处理模块或服务,该模块应包含一个经过验证且能够正确处理闰年的日期计算方法。
      • 不依赖于系统当前时间进行缓存逻辑判断,而是根据缓存创建时间和设定的有效期限进行计算。
    6. 模拟环境

      • 虽然云服务无法直接修改系统时间进行测试,但可以搭建隔离的测试环境,并在数据库层面对时间戳字段进行临时篡改,模拟闰年边界跨越情况。
    7. 监控和日志分析

      • 在生产环境中增加额外的日志记录,以便捕获与日期相关的异常和临界值行为。
      • 分析过往的用户反馈或内部日志,查看是否有闰年交接时出现的问题迹象。
  • 为每个问题提供更具体的例子:

    App 测试实例

    • 安装测试:检查 app 在不同操作系统版本和设备上的安装过程是否顺畅,包括下载、安装包验证、安装进度及成功后图标是否正常显示等。
    • 弱网测试示例:模拟网络环境为 2G/3G,在这种情况下,检查 app 的加载情况(如列表刷新、页面跳转)是否能够适应并给出相应的提示。

    Python 多态性实例

    class Animal:
        def speak(self):
            pass
    
    class Dog(Animal):
        def speak(self):
            return "Woof!"
    
    class Cat(Animal):
        def speak(self):
            return "Meow!"
    
    def make_sound(animal):
        animal.speak()
    
    dog = Dog()
    cat = Cat()
    
    # 多态性体现在这里,虽然传入的是父类引用,但调用的是子类的方法
    make_sound(dog)  # 输出: "Woof!"
    make_sound(cat)  # 输出: "Meow!"
    

    显式等待与隐式等待在 Selenium 中的例子

    • 显式等待:

      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      
      wait = WebDriverWait(driver, 10)
      element = wait.until(EC.presence_of_element_located((By.ID, 'dynamicElement')))
      
    • 隐式等待:

      driver.implicitly_wait(10)  # 设置全局隐式等待时间为10秒
      element = driver.find_element(By.ID, 'dynamicElement')  # 自动等待元素出现或可交互
      

    定位 alert 弹框的实际代码

    alert = driver.switch_to.alert
    alert.accept()  # 接受弹窗
    

    定位动态元素示例(假设一个新消息会在页面中动态加载出来):

    # 使用显式等待定位动态加载的消息元素
    wait = WebDriverWait(driver, 10)
    message_box = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'new-message')))
    

    left join 和 inner join 示例(使用 SQL 查询语句):

    -- LEFT JOIN 示例
    SELECT Customers.CustomerName, Orders.OrderID
    FROM Customers
    LEFT JOIN Orders
    ON Customers.CustomerID = Orders.CustomerID;
    
    -- INNER JOIN 示例
    SELECT Customers.CustomerName, Orders.OrderID
    FROM Customers
    INNER JOIN Orders
    ON Customers.CustomerID = Orders.CustomerID;
    

    Python 面向对象编程实例

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def introduce_self(self):
            return f"Hello, I am {self.name} and I am {self.age} years old."
    
    # 创建对象
    person1 = Person("Alice", 25)
    print(person1.introduce_self())  # 输出: Hello, I am Alice and I am 25 years old.
    
    # 继承与多态示例
    class Student(Person):
        def __init__(self, name, age, grade):
            super().__init__(name, age)
            self.grade = grade
    
        def introduce_self(self):
            return super().introduce_self() + f" and I am in grade {self.grade}."
    
    student1 = Student("Bob", 16, 10)
    print(student1.introduce_self())  # 输出: Hello, I am Bob and I am 16 years old and I am in grade 10.
    
  • 1、关于 app 测试,您的回答基本正确。在测试过程中确实需要关注安装与卸载流程、权限管理、弱网络环境下的表现、后台切换及进程杀掉后恢复情况、安全测试(如数据加密、防止注入攻击等)、稳定性测试(例如 Monkey 测试)以及专项性能测试,比如耗电量、流量使用、启动速度、页面跳转速度、内存消耗、内存泄漏检测、CPU 和 GPU 占用率等。同时,针对界面和功能的测试也类似于 Web 端。

    2、Python 的多态描述得较为准确。多态性是指允许你使用一个接口处理多种类型的对象,即同一种操作作用于不同的对象会得到不同的结果。例如,在继承关系中,父类的引用可以指向子类的对象,当调用具有多态性的方法时,实际执行的是子类重写的方法。

    3、对于显示等待与隐式等待的概念阐述正确。显式等待是在代码中明确指定某个条件满足时继续执行,否则持续等待;而隐式等待是 Selenium 中设置全局等待时间,系统会自动在元素查找时等待指定时间,若超过这个时间还没找到元素则抛出异常。

    4、定位 alert 弹窗的方法无误。通过 driver.switchTo().alert() 可以处理 alert、confirm 或 prompt 等弹窗,并使用 .accept() 接受或 .dismiss() 关闭弹窗。

    5、定位动态元素的部分存在混淆。动态元素是指在页面加载后或者用户交互过程中才生成或变化的元素。定位动态元素通常采用以下策略:

    • 显式等待:根据预期条件(如元素可见、可交互等)设置等待;
    • 使用 xpath、CSS 选择器或其他定位方式结合动态属性值来定位;
    • JavaScript 执行命令获取动态元素;
    • 轮询检查元素是否存在。

    6、left join、right join 与 inner join 的区别解释正确。left join 返回左表所有记录,右表匹配不到的数据为 NULL;right join 则相反,返回右表所有记录,左表匹配不到的数据为 NULL;inner join 只返回两个表的交集部分。

    7、Python 面向对象的概述比较笼统。面向对象的三大特性包括封装、继承和多态。在 Python 中,可以通过定义类来创建对象,类包含了属性(数据成员)和方法(成员函数),实现对现实世界问题的抽象建模,同时支持多重继承和 Mixin 类等灵活的面向对象机制。

  • 找了一圈,确实没有删除按钮