• 什么是Tor?Tor浏览器更新有什么用?什么是Tor?Tor浏览器更新有什么用?
  • 难怪马斯克裁掉整个安全部门,推特540万用户数据在暗网公开难怪马斯克裁掉整个安全部门,推特540万用户数据在暗网公开
  • 中华人民共和国网络安全法中华人民共和国网络安全法
大横幅1
大横幅2
到期时间:永久 到期时间:推广
到期时间:推广 小横幅4
今日发布0 篇文章 | 本站共发布了2011篇文章
  • 2023好看的跳转页源码

    2023好看跳转页 ...

    2023-12-25 实用工具 165
  • X64 微信Windows版 防撤回

    曾经说过,防撤回这个我也纳入了需要做的范围内。也会采用之前方式来达到,尽量支持通用版本的支持。传统的替换方式文件着实的大,秉承着能懒觉不勤快一点的原则。 用法依旧一样,打开软件,在打来微信即可。当前版本未纳入32位范围,别人为什么,问就是懒。 当前版本也没有添加多开。按理说X64版本通用,包括后面版本的更新。这个是一个猜想。具体还得实践测试。 放个图:这个只是处理界面。 我去1.8M也没办法上传附件。只有网盘了 ...

    2023-12-25 实用工具 130
  • WiFi Mouse PRO v5.3.3手机变鼠标键盘

    安卓端https://cloud.189.cn/t/NzUvyibueyqy访问码:ip7h 电脑端https://cloud.189.cn/t/YZ3MnyIjEBBf访问码:i4qr https://cloud.189.cn/t/jEf67bfMb2Yj访问码:ce0p 文件夹 https://cloud.189.cn/t/ENZ3UrBRNFjq访问码:6yei 快速把你的手机变成无线鼠标、键盘、触摸板,它还支持语音识别直接输出文本到电脑端。 它还拥有媒体播放控制、浏览器控制、应用程序切换、关机等一系列方便使用的功能。 只需接入网络,即可享受这些功能。 ...

    2023-12-25 实用工具 170
  • 某博今夜清纯大赛✨ ​​​

    点击围观  ...

    2023-12-25 福利分享 149
  • ALPHV勒索软件团伙的暗网泄密网站被查封后,又推出了新的暗网onion域名

    前天,“Kirin博客”报道了国际联合执法机构查封了臭名昭著的ALPHV勒索软件团伙的暗网泄密网站,在经历与美国当局的暗网域名争夺战后,ALPHV勒索软件团伙选择推出了新的暗网onion域名。 ALPHV勒索软件团伙又名BlackCat,最初于2020年8月以“DarkSide”名义推出 ,然后在面临因该团伙广泛宣传的对殖民管道的勒索攻击而造成的执法行动的巨大压力后于2021年5月关闭。 该勒索软件团伙后来于2021年7月31日以“BlackMatter”名称回归,但在Emsisoft利用漏洞创建解密器并查封服务器后,该勒索软件团伙于2021年11月再次关闭。 该团伙于2021年11月再次回归,这次的名称为“BlackCat/ALPHV”。从那时起,勒索软件团伙不断演变其勒索策略,并采取与英语附属机构合作的不寻常方式 。 这次事件一开始,ALPHV勒索软件团伙对外界宣称说,由于硬件故障,他们的暗网网站离线了。这种情况过去也发生过,所以很多人相信了这个借口。ALPHV勒索软件团伙接着表示,他们已经转移了暗网泄密网站的服务器和博客。 然而,12月19日,美国政府就ALPHV勒索软件发布了一份官方声明,声称ALPHV勒索软件的基础设施已经被联邦调查局(FBI)查封,他们公布了针对 ALPHV 的解密工具,并与国际合作伙伴合作,已经为 500 多家公司解密。联邦调查局 ALPHV 的搜查令指出,一名秘密线人进入了 ALPHV 面板。然后,联邦调查局对 ALPHV 面板进行了…… “调查”,设法进入了 ALPHV 网络,获得了 946 个Tor 站点的公钥/私钥对,ALPHV勒索软件团伙使用这些站点来托管受害者通信站点、泄密站点以及上述附属面板。 至此,FBI也掌握了ALPHV勒索软件团伙的暗网网站的.onion域名(http://alphvmmm27o3abo3r2mlmjrpdmzle3rykajqc5xsj7j7ejksbpsa36ad.onion)的密钥,与ALPHV 勒索软件团伙开展了拉锯战。19日的时候,FBI将该勒索软件团伙的暗网网站的.onion域名转向扣押的页面,显示扣押图片以及以下信息: 这项行动是在欧洲刑警组织和哥廷根犯罪调查中心的大力协助下,与美国佛罗里达州南区检察官办公室和司法部计算机犯罪和知识产权科协调采取的。 如果您有关于Blackcat、其附属机构或活动的信息,您可能有资格通过美国国务院的正义奖赏计划获得奖赏。信息可通过以下基于 Tor 的举报热线提交:he5dybnt7sr6cm32xt77pazmtm65flqy6irivtflruqfc5ep7eiodiad.onion(需要 Tor 浏览器)。 有关针对美国关键基础设施的外国恶意网络活动信息奖励的更多信息,请访问 https://rfj.tips/SDT55f。 然而,20日,当人们访问ALPHV勒索软件团伙的暗网网站的.onion域名(http://alphvmmm27o3abo3r2mlmjrpdmzle3rykajqc5xsj7j7ejksbpsa36ad.onion)时,出现以下页面,ALPHV勒索软件团伙声称“夺取”了他们的数据泄露站点,重新获得了对 URL 的控制,并声称 FBI 获得了对他们用来托管服务器的数据中心的访问权限。   由于 ALPHV 运营商和 FBI 现在都控制着用于在 Tor 中的暗网泄露网站洋葱 URL 的私钥,因此他们可以来回夺取对方的 URL,这一过程一整天都在进行。 不过,作为 ALPHV 解除扣押信息的一部分,该团伙宣布为其数据泄露网站推出一个新的暗网onion域名(http://alphvuzxyxv6ylumd2ngp46xzq3pw6zflomrghvxeuks6kklberrbmyd.onion),FBI 没有该网站的私钥,因此无法扣押。 该勒索软件团伙声称,FBI 仅在过去一个半月内获得了约 400 家公司的解密密钥。然而,他们表示,另外 3000 名受害者现在将失去钥匙。 ALPHV勒索软件团伙还表示,他们正在取消对其附属机构的所有限制,使他们能够瞄准任何他们想要的组织,包括关键基础设施。附属机构仍被限制攻击独立国家联合体(独联体)国家,这些国家以前是苏联的一部分。 最后,ALPHV勒索软件团伙表示将附属公司的收入份额提高到支付赎金的 90%,这可能会说服他们转而使用竞争的勒索软件即服务。 ALPHV勒索软件团伙的声明: 大家都知道,联邦调查局拿到了我们博客的钥匙,现在我们来告诉大家是怎么回事。 首先,这一切是如何发生的,在检查了他们的文件后,我们了解到他们获得了其中一个 DC 的访问权限,因为所有其他 DC 都没有被触及,事实证明,他们以某种方式入侵了我们的一个主机,甚至可能是他本人帮助了他们。 他们最多能拿到过去一个半月的密钥,大约有 400 家公司,但现在有 3000 多家公司再也收不到他们的密钥了。 由于他们的行为,我们正在引入新的规则,或者说取消所有的规则,除了一条,你不能碰独联体,你现在可以阻止医院,核电站,任何东西和任何地方。 现在,所有广告的费率为 90%。 我们不向公司提供任何折扣,严格按照我们规定的金额付款。 VIP 广告客户将获得我们为其单独设立的私人联盟计划,该计划位于独立的 DC 上,彼此完全隔离。 感谢您的体验,我们会考虑到我们的错误,更加努力地工作,等待您在聊天室中的抱怨和要求提供不再存在的折扣。   美国当局与ALPHV勒索软件团伙战斗的时间线: ----------------------- 2023年12月10日:ALPHV主域名离线,其管理者称是硬件故障 2023年12月10日:传言是美国当局导致ALPHV下线 2023年12月11日:ALPHV否认指控 2023年12月19日上午7:26:ALPHV域名被查封 2023年12月19日上午7:42:ALPHV称这是旧域名,无关紧要 2023年12月19日上午9:56:美国司法部就ALPHV被查封及其服务器被入侵一事发布官方声明 2023年12月19日中午12:34:ALPHV取消域名并威胁对美国(及相关实体)进行报复,允许对关键基础设施进行攻击...

    2023-12-24 值得一看 186
  • 又一个暗网交易市场倒下,Kingdom Market被德国当局主导的国际联合执法行动摧毁

    法兰克福总检察长办公室的中央打击网络犯罪办公室ZIT 和德国联邦刑事警察局BKA的调查取得部分成功。在一项国际协调行动中,法兰克福总检察长办公室的中央打击网络犯罪办公室( ZIT) 和联邦刑事警察局 (BKA) 联合查获了非法暗网市场 Market”(王国市场”)的服务器,成功于2023年12月16日关闭了暗网上的非法市场“Kingdom Market”。 美国、瑞士、摩尔多瓦共和国和乌克兰的执法当局在调查过程中与德国机构密切合作。 然而,“Kingdom Market”暗网市场的管理员尚未被抓获。但是,这个市场的客户最好还是要担心一下,警方会进行深入调查的。 “Kingdom Market”是一个非法暗网交易市场,至少自 2021 年 3 月起就存在,只能通过 Tor 网络和暗网上的隐形互联网项目 (I2P) 访问。该英语平台被用来交易非法商品。它的主要焦点是毒品贸易。 此外,恶意软件、犯罪服务和伪造文件也通过该平台进行广告宣传,以获取利润。市场上提供了超过 42000 种产品,其中约 3600 种来自德国。市场上有数以万计的客户账户和数百个卖家账户。 经过调查,警方确定犯罪商业平台“Kingdom Market”上注册了来自不同国家的数千个账户,暗网市场的用户使用比特币、莱特币、门罗币和 Zcash 加密货币来支付服务。“Kingdom Market”管理员收取3%的手续费作为平台上所有销售的佣金。 两天前,曾有疑似当局的执法人员或者恶搞的网友以“FallenKingdom”的昵称在暗网的Dread论坛上发表了致“Kingdom Market”全体居民的一份公告: 王国的居民们,我们自豪地宣布,王国已经灭亡!感谢你们的合作。待续…… 与此同时,一些名不见经传的暗网市场,如“Elysium Market”、“Dark Matter Market”、“SuperMarket”等市场的管理员或者推广者开始在Dread论坛上发帖,表示他们的市场欢迎“Kingdom Market”的难民们(客户与供应商)。 也有网友怀疑是由于网址旋转器(URL rotator)泄露了服务器的真实IP,论坛里半年前就已经提醒过了。 Dread论坛的管理员三天前发布了“王国市场可能已被执法部门查封”主题,称: Dread 工作人员从一个值得信赖的方面得到消息,称有多人已被执法部门逮捕,他们的系统被查封,而这些人有足够的服务器权限进入王国的基础设施。我们不知道,也可能永远不会知道,这次被打击的严重程度。这是一个遗憾,但根据目前提供的信息,Kingdom Market从瘫痪中恢复的可能性基本上为零。 我会让评论开放几天,然后在有新消息之前将此子主题存档。 这样的事情偶尔会发生。请接受现实吧。如果你在 Kingdom 上订购时正确遵守了 OPSEC,你就不需要担心太多。如果没有,那就清理门户吧。 并在该消息得到德国当局证实后更新了BKA的链接:https://www.bka.de/DE/Presse/Listenseite_Pressemitteilungen/2023/Presse2023/231220_PM_Darknet_Kingdom_Market.html 暗网市场“Kingdom Market”在Dread论坛上的支持管理员“OhLongJohnson”也发表了最新的主题“来自 OhLongJohnson 的文字,KM 永远消失了。”,内容为: 亲爱的会员们 我很遗憾地告诉大家,管理员没了,市场没了,被查封了。 我现在很好,希望这一切能保持原样。 我要向所有社区和我们的会员道歉。太糟糕了,没有人会看到我们正在开发的新升级。我非常期待新升级版本的发布。这是我梦寐以求的工作。 非常感谢你们所有人,我爱你们,并将永远爱你们,我会记住的。我始终相信每个供应商都是善良的,并尽我所能为他们提供支持。我相信,每一个有“骗人”想法的供应商都可以成为真正的专业人士。我与许多买家和供应商建立了良好的关系,我感谢你们信任我,我也信任你们。我唯一遗憾的是,我无法与最近加入的新供应商进行更多交流。发生这样的事情,我感到非常难过。 我也很遗憾你们在市场服务器被查封后损失了金钱。我不知道查封了什么,也不知道数据库服务器位于何处。希望尽快恢复。 对不起,Kingdom让您失望了,对不起,您在市场关闭时损失了金钱。至少钱包和服务器不在同一个地方。 对于那些恨我或仍然恨我的人,我尊重你们和你们的意见。我并不完美,但我已尽我所能,努力做得越来越好。如果我伤害了任何人或在争议中做出了错误的决定,请原谅我。 也许我可以向您推荐我认为可以作为新家的任何其他市场,但我只提到一个市场可能会被认为有嫌疑。 我愿意相信,Kingdom Market 的这种情况会让暗网社区更加团结,让暗网用户彼此友好,而不是嘲笑新手,我希望从现在起有一个市场会退出骗局,而是以专业、和平的方式退出。许多人会认为我的话是胡说八道或类似的东西,但没关系,不同的意见总是好的,我是发自内心的。 遗憾的是,我无法告诉您我们的市场是如何建立起来的,因为我没有参与整个市场的开发,无论是旧市场还是新市场。我只是就 opsec 发现等问题与其他人进行了交流。我可以说,由于安全原因,钱包至少应该放在不同的地方。 对于所发生的一切,我真的很抱歉。 我爱你们,不管发生什么,你们都要好好相处,注意安全,保持微笑。我会去一个地方,希望他们不会抓我。感谢你们在 Kingdom Market 的工作,感谢你们对我们的忠诚和信任。我会记住你们,直到生命的尽头。 很棒的经历,我喜欢这份工作。 敬爱的 您的 OhLongJohnson 此外,Kirin博客发现,“Kingdom Market”在明网的镜像域名kingdommarket.so也被警方查封,访问后会跳转至http://kingdom-mkt-seized.com/。 更多暗网新闻动态,请关注“Kirin博客”。...

    2023-12-24 值得一看 178
  • 某博职业反差.大赛

    点击围观  ...

    2023-12-24 福利分享 99
  • 某博yyds眼睛.大赛

    点击围观  ...

    2023-12-24 福利分享 109
  • 系统设计-如何做到高可用、高吞吐、高扩展性

    我们经常需要设计具有高可用性、高可扩展性和高吞吐量的系统。它们的确切含义是什么? 下图是一份系统设计小抄,包含“三高”常见的解决方案。 1、高可用性 高可用意味着我们需要达到一个高水平的正常运行时间。我们通常将设计目标描述为 “3 个 9 ” 或 “4 个 9″。”4 个九”,即 99.99% 的正常运行时间,意味着服务每天只能中断 8.64 秒。 要实现高可用性,我们需要在系统中设计冗余。有几种方法可以做到这一点: Hot-Hot 两个实例接收相同的输入,并将输出发送到下游服务。如果其中一方宕机,另一方可以立即接替。由于两边都向下游发送输出,下游系统需要能够处理重复数据。 Hot-Warm 两个实例接收相同的输入,只有 Hot 端向下游服务发送输出。如果 Hot 端宕机, Warm 端将接替并开始向下游服务发送输出。 单领导集群 (Single Leader) 一个领导实例从上游系统接收数据并复制到其他副本。 无领导集群 (Leaderless) 这种集群中没有领导者。任何写入都会复制到其他实例。只要写入实例数加上读取实例数大于实例总数,我们就能获得有效数据。这被称为 quorum。 2、高吞吐量 这意味着服务需要在一段时间内处理大量请求。常用的指标是 QPS(每秒查询次数)或 TPS(每秒事务次数)。 为了实现高吞吐量,我们通常会在架构中添加缓存,以避免经过数据库或磁盘等较慢的 I/O 设备。我们还可以为计算密集型任务增加线程数量。但是,增加过多的线程会降低性能。因此,我们需要找出系统的瓶颈,提高系统的吞吐量。 我们还可以在系统中使用异步处理,以有效地单独隔离耗时耗资源的组件。 3、高扩展性 高扩展性意味着系统可以快速、轻松地扩展,以容纳更多的容量(横向可扩展性)或更多的功能(纵向可扩展性)。通常,我们通过观察响应时间来决定是否需要扩展系统。 要实现高度可扩展性,需要隔离每个服务的职责。为此,微服务被广泛采用。我们还利用服务注册和负载平衡器将请求路由到适当的实例。 ...

    2023-12-22 值得一看 164
  • 什么是DevOps和NoOps

    DevOps和NoOps是如何改变软件开发生命周期(SDLC)的? 下图比较了传统 SDLC、DevOps 和 NoOps。 在传统的软件开发中,开发、编译打包、测试、发布和监控是孤立的功能。 每个阶段都独立工作,然后移交给下一个阶段。 而 DevOps 鼓励持续开发以及开发人员和运营人员之间的协作。 这缩短了整个生命周期,提供了持续高质量的软件交付。 NoOps 是随着无服务器计算(Serverless)的发展而出现的新概念。由于我们可以使用 FaaS(Function-as-a-Service,函数即服务)和 BaaS(Backend-as-a-Service,后端即服务)来架构系统,因此云服务提供商可以承担大部分运营任务。开发人员可以专注于功能开发,并自动执行运维操作任务。 对于初创企业或较小规模的应用程序来说,NoOps 是一种务实有效的方法,它比 DevOps 更能缩短 SDLC。 ...

    2023-12-22 值得一看 146
  • logback详解及入门案例

    1. logback 日志的作用 记录系统和接口的使用情况,比如请求日志 记录和分析用户的行为,比如网站访问日志 调试程序,和控制台的作用类似,但是控制台中的内容并不会保存到文件中,而日志可以长期保存。 帮助我们排查和定位错误。比如在系统抛出异常时,将异常信息记录到日志,可以事后复盘。 通过分析日志还能够优化代码逻辑、提升系统性能、稳定性等。 1.1. logback介绍 Logback继承自log4j。Logback的架构非常的通用,适用于不同的使用场景。 通过上图可以看到logback和Log4j都是slf4j规范的具体实现,我们在程序中直接调用的API其实都是slf4j的api,底层则是真正的日志实现组件—logback或者log4j。 Logback 构建在三个主要的类上:Logger,Appender 和 Layout。这三个不同类型的组件一起作用能够让开发者根据消息的类型以及日志的级别来打印日志。 Logger作为日志的记录器,把它关联到应用的对应的context后,主要用于存放日志对象,也可以定义日志类型、级别。各个logger 都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各 logger。 Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件、 数据库等。 Layout 负责把事件转换成字符串,输出格式化的日志信息。 logback的maven坐标: <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.12</version> </dependency> 1.2. logback层级 在 logback中每一个 logger 都依附在 LoggerContext 上,它负责产生 logger,并且通过一个树状的层级结构来进行管理。 一个 Logger 被当作为一个实体,它们的命名是大小写敏感的,并且遵循以下规则: 如果一个logger的名字加上一个**.**作为另一个logger名字的前缀,那么该logger就是另一个logger的祖先。如果一个logger与另一个logger之间没有其它的logger,则该logger就是另一个logger的父级。 举例: 名为com.zbbmeta的logger是名为com.zbbmeta.service的logger的父级 名为com的logger是名为com.zbbmeta的logger的父级,是名为com.zbbmetat.service的logger的祖先 在logback中有一个root logger,它是logger层次结构的最高层,它是一个特殊的logger,因为它是每一个层次结构的一部分。 1.3. logback日志输出等级 logback的日志输出等级分为:TRACE, DEBUG, INFO, WARN, ERROR。 如果一个给定的logger没有指定一个日志输出等级,那么它就会继承离它最近的一个祖先的层级。 为了确保所有的logger都有一个日志输出等级,root logger会有一个默认输出等级 — DEBUG。 1.4 logback初始化步骤 logback会在类路径下寻找名为logback-test.xml的文件 如果没有找到,logback会继续寻找名为logback.groovy的文件 如果没有找到,logback会继续寻找名为logback.xml的文件 如果没有找到,将会在类路径下寻找文件META-INFO/services/ch.qos.logback.classic.spi.Configurator,该文件的内容为实现了Configurator接口的实现类的全限定类名 如果以上都没有成功,logback会通过BasicConfigurator为自己进行配置,并且日志将会全部在控制台打印出来 最后一步的目的是为了保证在所有的配置文件都没有被找到的情况下,提供一个默认的配置。 2. logback入门案例 2.1. 案例一 本案例是一个logback简单应用,并且不提供配置文件而使用其提供的默认配置。 第一步:创建maven工程logback-demo并配置pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zbbmeta</groupId> <artifactId>logback-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project> 第二步:编写单元测试 package com.zbbmeta.logback; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.core.util.StatusPrinter; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 测试logback日志组件的使用 */ public class LogbackTest { //简单使用 @Test public void test1(){ //通过工厂对象获得一个logger日志记录器对象 Logger logger = LoggerFactory.getLogger("com.zbbmeta.test"); //当前logger对象的日志输出级别为debug,从root logger继承来的 //使用trace级别记录日志 logger.trace("trace..."); logger.debug("debug..."); logger.info("info..."); logger.warn("warn..."); logger.error("error..."); } //打印日志内部状态 @Test public void test2(){ //通过工厂对象获得一个logger日志记录器对象 Logger logger = LoggerFactory.getLogger("com.zbbmeta.test"); //当前logger对象的日志输出级别为debug,从root logger继承来的 //使用trace级别记录日志 logger.trace("trace..."); logger.debug("debug..."); logger.info("info..."); logger.warn("warn..."); logger.error("error..."); // 打印内部的状态 LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory(); StatusPrinter.print(lc); // 说明找文件步骤-->logback-test.xml-->logback.xml-->configuration /* |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml] |-INFO in ch.qos.logback.classic.BasicConfigurator@691a7f8f - Setting up default configuration.*/ } /* * 日志输出级别:ERROR > WARN > INFO > DEBUG > TRACE * */ //测试默认的日志输出级别 @Test public void test3(){ Logger logger = LoggerFactory.getLogger("com.zbbmeta.logback.HelloWorld"); logger.error("error ..."); logger.warn("warn ..."); logger.info("info ..."); logger.debug("debug ..."); //因为默认的输出级别为debug,所以这一条日志不会输出 logger.trace("trace ..."); } //设置日志输出等级 @Test public void test4(){ ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("com.zbbmeta.logback.HelloWorld"); logger.setLevel(Level.DEBUG);//设置当前日志记录器对象的日志输出级别 logger.error("error ..."); logger.warn("warn ..."); logger.info("info ..."); logger.debug("debug ..."); //因为默认的输出级别为debug,所以这一条日志不会输出 logger.trace("trace ..."); } //测试Logger的继承 @Test public void test5(){ ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("com.zbbmeta"); logger.setLevel(Level.TRACE);//设置当前日志记录器对象的日志输出级别 //当前记录器对象是上面记录器对象的子级,从父级继承输出等级---INFO Logger logger1 = LoggerFactory.getLogger("com.zbbmeta.test"); logger1.error("error ..."); logger1.warn("warn ..."); logger1.info("info ..."); logger1.debug("debug ..."); logger1.trace("trace ..."); } //Logger获取,根据同一个名称获得的logger都是同一个实例 @Test public void test6(){ Logger logger1 = LoggerFactory.getLogger("com.zbbmeta.test"); Logger logger2 = LoggerFactory.getLogger("com.zbbmeta.test"); System.out.println(logger1 == logger2); } //参数化日志 @Test public void test7(){ Logger logger = LoggerFactory.getLogger("com.zbbmeta"); String value = "world"; logger.info("参数值为:" + value); logger.debug("hello {}","world"); } } 2.2 案例二 本案例是logback中Spring Boot项目中的应用。 第一步:创建maven工程springboot-logback-demo并配置pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.7.15</version> </parent> <groupId>com.zbbmeta</groupId> <artifactId>springboot-logback-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> </dependencies> </project> 第二步:在resources下编写logback配置文件logback-base.xml和logback-spring.xml logback-base.xml:作为基础配置 <?xml version="1.0" encoding="UTF-8"?> <included> <contextName>logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值 定义变量后,可以使“${}”来使用变量 --> <property name="log.path" value="logs" /> <!-- 彩色日志 --> <!-- 彩色日志依赖的渲染类 --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <!-- 彩色日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <!--输出到控制台--> <appender name="LOG_CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> <!-- 设置字符集 --> <charset>UTF-8</charset> </encoder> </appender> <!--输出到文件--> <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/logback.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每天日志归档路径以及格式 --> <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> </appender> </included> logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!--引入其他配置文件--> <include resource="logback-base.xml" /> <!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender>。<logger>仅有一个name属性, 一个可选的level和一个可选的addtivity属性。 name:用来指定受此logger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 如果未设置此属性,那么当前logger将会继承上级的级别。 addtivity:是否向上级logger传递打印信息。默认是true。 --> <!--开发环境--> <springProfile name="dev"> <logger name="com.zbbmeta.controller" additivity="false" level="debug"> <appender-ref ref="LOG_CONSOLE"/> </logger> </springProfile> <!--生产环境--> <springProfile name="pro"> <logger name="com.zbbmeta.controller" additivity="false" level="info"> <appender-ref ref="LOG_FILE"/> </logger> </springProfile> <!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF 默认是DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 --> <root level="info"> <appender-ref ref="LOG_CONSOLE" /> <appender-ref ref="LOG_FILE" /> </root> </configuration> 第三步:编写application.yml server: port: 8999 #logging: # #在Spring Boot项目中默认加载类路径下的logback-spring.xml文件 # config: classpath:logback.xml logging: #在Spring Boot项目中默认加载类路径下的logback-spring.xml文件 config: classpath:logback-spring.xml spring: profiles: active: dev 第四步:创建TutorialController package com.zbbmeta.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; import java.util.Objects; /** * @author springboot * @description: TODO */ @RestController @RequestMapping("/api") public class TutorialController { private static final Logger log = LoggerFactory.getLogger(TutorialController.class); /** * 根据ID查询Tutorial * @param id * @return */ @GetMapping("/tutorials/{id}") public void getTutorialById(@PathVariable("id") long id) { log.trace("trace..."); log.debug("debug..."); log.info("info..."); log.warn("warn..."); log.error("error..."); } } 第五步:创建启动类 package com.zbbmeta; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author springboot * @description: TODO */ @SpringBootApplication public class LogbackDemoApplication { public static void main(String[] args) { SpringApplication.run(LogbackDemoApplication.class,args); } } 启动项目,访问地址:http://localhost:8999/api/tutorials/1 可以看到控制台已经开始输出日志信息。 修改application.yml文件中的开发模式为pro,重启项目这日志输出到了文件中。 ...

    2023-12-22 值得一看 154
  • Java8 reduce操作详解

    什么是reduce Java8 中有两大最为重要的改变,其一是 Lambda 表达式,另一个就是 Stream API 了。 Stream 是 Java8 中处理集合的关键抽象概念,它将数据源流化后,可以执行非常复杂的查找、过滤和映射数据、排序、切片、聚合统计等操作。操作之后会产生一个新的流,而数据源则不会发生改变。 在使用 Stream 操作的过程中,往往有三个步骤, 1. 创建Stream 从一个数据源(集合,数组)中,新建一个 Stream 流。 2. 中间操作 一个中间操作链,对 Stream 流的数据进行处理。比如查找、过滤、映射转换等。 3. 终止操作 一个终止操作,执行中间操作链,并产生结果。常用的终止操作有 forearch、collect、match、count、min、max、reduce 等。 其中本文主要讲解的 reduct 操作就属于是 Stream 流操作中的终止操作。 reduce 操作是一种通用的归约操作,它可以实现从 Stream 中生成一个值,其生成的值不是随意的,而是根据指定的计算模型。 比如终止操作中提到 count、min 和 max 方法,因为常用而被纳入标准库中。事实上这些方法都是一种 reduce 操作。 本文大纲如下, reduce 操作三要素 为了方便大家理解 reduce (规约)操作,先给大家演示一下 reduce 操作的相关代码示例, List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); int result = numbers .stream() .reduce(0, (subtotal, element) -> subtotal + element); assertThat(result).isEqualTo(21); 可以看到,我们的 reduce 操作接受了三个参数,返回了一个 int 基本类型。 在 Stream API 中,提供了三个 reduct 操作方法,根据参数不同进行区分。 对应上方代码示例,也就是使用了接受两个参数的 reduce 方法,但其实接受两个参数的 reduce 方法的代码逻辑是和接受三个参数的 reduce 方法是一致的。通过上方截图可以看出。 所以这里,我就直接给大家介绍下 reduce 操作的三个参数分别有什么作用即可。 identiy 参数 identiy(初始值)是 reduce 操作的初始值,也就是当元素集合为空时的默认结果。对应上方代码示例,也就是说 reduce 操作的初始值是 0。 accumulator 参数 accumulator(累加器)是一个函数,它接受两个参数,reduce 操作的部分元素和元素集合中的下一个元素。它返回一个新的部分元素。在这个例子中,累加器是一个 lambda 表达式,它将集合中两个整数相加并返回一个整数:(a, b) -> a + b。 combiner 参数 combiner(组合器)是一个函数,它用于在 reduce 操作被并行化或者当累加器的参数类型和实现类型不匹配时,将 reduce 操作的部分结果进行组合。在上面代码示例中,我们不需要使用组合器,因为上面我们的 reduce 操作不需要并行,而且累加器的参数类型和实现类型都是 Integer。 为了方便大家理解 reduce 操作的内部逻辑,我给大家绘制了上面代码示例的执行示意图,如下, 如何使用 reduce 操作 为了更好地理解初始值,累加器和组合器的功能,让我们看一些基本的例子。 使用 reduce 查询整数集合的最小值 // 创建一个整数集合 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // 找出集合中的最小值 Integer min = numbers.stream().reduce((integer, integer2) -> { if (integer < integer2) { return integer; } else { return integer2; } }).get(); // 输出结果 System.out.println(min); // 1 在这个例子中,我们使用了一个参数的 reduce 操作,它接受一个累加器函数。累加器函数会返回集合两个元素中,较小的元素。 最终我们就可以找出集合中最小值 1。 使用 reduce 操作拼接字符串列表 我们可以对一个字符串列表使用 reduce 操作,将它们拼接成一个单一的字符串: // 创建一个字符串列表 List<String> letters = Arrays.asList ("a", "b", "c", "d", "e"); // 使用 reduce 操作拼接字符串列表 String result = letters .stream () .reduce ("", (partialString, element) -> partialString + element); // 输出结果 System.out.println (result); // abcde 在这个例子中,我们将初始值设为 “”,累加器函数设为 (a, b) -> a + b,它表示将两个字符串拼接起来。 我们可以看到,reduce 操作将累加器函数反复应用到列表中的每个元素上,得到最终的结果 abcde。 使用并行流计算整数列表的总和 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5,6); // 使用并行流和 reduce() 方法计算整数列表的总和 int result = numbers.parallelStream() .reduce(0, (a, b) -> a + b, Integer::sum); // 输出结果 System.out.println(result); // 21 在这个例子中,我们使用 parallelStream() 方法将列表转换为并行流,再使用 reduce() 方法对整数列表进行 reduce 操作,并使用 Integer::sum 作为合并函数 combiner,将并行计算的结果合并。 使用并行流的好处能够充分利用多核 CPU 的优势,使用多线程加快对集合数据的处理速度。 不过并行流也不是任何时候都可以使用的,并行流执行过程中实际按照多线程执行,多线程编程有的问题,并行流都有。 比如多线程的线程安全,执行顺序等问题,并行流都是有的。这一点需要大家注意。 最后聊两句 本文介绍了 Java8 Stream 流中,reduce 操作的相关概念和接收参数,包含初始值,累加器和组合器,最后介绍了 reduce 操作如何使用,希望大家喜欢。 ...

    2023-12-22 值得一看 118
  • 什么是缓存,策略有哪些?

    什么是缓存? 缓存就像是一个超快速的存储区域,保存了计算机或手机经常使用的内容的副本,这样可以在不访问较慢的主存储器的情况下快速获取。 一个现实中的例子可以是,每当我们购买杂货时,通常会倾向于大量购买,这样可以让杂货多存放一段时间,避免频繁去市场购买,这其实就是将杂货缓存在我们附近,而不是每次都从市场购买。 在系统设计中,如果缓存得当,它可以显著提升系统的性能。 缓存策略取决于数据访问模式,即数据是如何读取或写入的。 例如: 系统是读取密集型还是写入密集型? 系统是否需要高一致性? 等等…… 因此,选择正确的写入缓存策略非常关键,下面是一些不同的缓存策略: 1. 缓存旁路(懒加载) 在这种设置中,应用程序缓存被分离出来,应用程序显式地与缓存和数据库一起工作。 这是一种技术,应用程序代码负责管理缓存。 当需要时,应用程序会将数据显式加载到缓存中,而缓存不会主动参与数据获取。 该图示了其工作原理。 使用场景: 适用于读取密集型系统,Redis 或 Memcached 非常受欢迎,我曾经在缓存旁路设置中使用过 Redis 以及 Mongo-db,效果非常显著。 这种读取技术可以与诸如写入旁路缓存之类的数据写入技术相结合,我接下来会解释。 优点: 灵活性:允许选择性缓存特定数据。 控制:应用程序控制数据何时加载到缓存中。 缺点: 提供过期数据:可能会提供过期数据,但如果我们实现了缓存的TTL(生存时间),则可以避免这种情况。 2. 写入旁路 跳过缓存,直接将数据写入数据库,并在读取用户请求的数据时更新缓存。 使用场景: 写入旁路可以与读取通过结合,对于数据写入一次,读取频率较低或几乎不读取的情况下提供良好的性能,例如实时日志或聊天室消息。 同样,这种模式也可以与缓存旁路结合使用。 3. 读取穿透缓存 读取穿透缓存是一种策略,当发生缓存未命中时,缓存会自动从底层数据源检索数据并填充自身。 这种技术与应用程序的数据访问层无缝集成,确保缓存与数据源保持同步。 使用场景、优点和缺点: 读取穿透缓存适用于读取密集的工作负载,当同一数据被多次请求时,例如,一个新博客。 缺点是,当首次请求数据时,总是会导致缓存未命中,并造成额外的数据加载开销。 4. 写入穿透缓存 写入穿透缓存是一种策略,其中写操作同时应用于缓存和底层数据源。 这确保了缓存和数据源保持同步,但与写入后缓存相比可能会引入额外的延迟,它同步应用更新。 使用场景、优点和缺点: 当与读取穿透缓存结合时,写入穿透缓存可以保证每次读取和写入的数据一致性。 但它会增加写操作的额外开销,因为每次写入都需要两次写入操作(缓存和数据库)。 它以异步方式应用更新。 5. 写入后缓存 写入后缓存,也称为写回缓存,涉及在写操作发生时延迟对数据源的更新。 系统不会立即更新底层存储,而是首先更新缓存,然后异步将更改传播到数据源。 使用场景、优点和缺点: 写回缓存提高了写入性能,非常适用于写入密集型任务。 当与读取穿透结合时,适用于混合工作负载,确保最近的数据可用。 ...

    2023-12-22 值得一看 114
  • c++零基础怎么学

    C++ 是一种通用的、面向对象的编程语言,可以用于开发操作系统、游戏、图形用户界面、后端、高性能系统应用程序、以及各种嵌入式设备固件。 它是世界上最流行的编程语言之一,给程序员提供了对系统资源和内存的高度控制,以用于开发运行在多个平台上的应用程序,如服务器、个人计算机、基于云的系统和移动设备等。 学习 C++ 可以帮助你进入计算机游戏、高端计算项目的软件工程、加密货币挖掘程序以及开发运行在移动设备上的操作系统和其他软件等领域。 C++ 历史简介 C++ 是由丹麦计算机科学家 Bjarne Stroustrup 创建、设计和开发的。设计之初,Stroustrup 希望创建一种类似于 C 的灵活和动态的语言,但具有更多的功能。 最初被称为“带类的C”,1983 年改名为C++,大致意思是“比 C 多一点”的意思。 国际标准化组织的 C++ 联合技术委员会在 1998 年至 2017 年间对 C++ 进行了五次升级。C++20 也已发布。 C 与 C++ 的区别 C++ 是 C 的演变,虽然它们有一些相似之处,但现在它们已经有了很大的不同。虽然 C 广泛被使用,但它不支持 C++ 所支持的抽象、泛型编程和面向对象编程。 如果你想做一些需要大量代码的庞大工程,那么你就需要能够以非常高级的抽象方式思考。这是 C++ 所擅长的:支持这些高级抽象。 抽象层指的是观察或编程系统的复杂程度。较低级别的抽象具有更多的细节,而高级别的抽象可以包含整个系统。 C 是一种过程化语言;其代码由直接告诉计算机或其组件以逻辑步骤完成任务的指令组成。C++ 也可以做到这一点,但它还支持类和面向对象等高级特性,这使得程序员可以创建包含数据和函数的“对象”。这种方法的优势在于,软件对象执行速度更快,比过程命令更容易执行,面向对象编程使得代码更容易修改、维护和调试。 学习 C++ 起步步骤 由于 C++ 很受欢迎,对于初学者来说,有许多资源可供选择,包括在线教程、网站和书籍。 在决定学习 C++ 或任何计算机语言时,初学者应该对自己的专业目标有一定的设想。 大多数使用 C++ 的人都是专业软件工程师。这是一个重要的标志,特别是对于最近从大学毕业或具有计算机科学背景的人来说。计算机科学家研究更多的是理论性的课题,而专业软件工程师必须处理解决技术问题的细节相关,而 C++ 非常适合这种工作。 如果你选择使用 C++ 是因为你面临着非常苛刻的情况。比如你在开发游戏,性能绝对是关键因素。或者你可能在开发某种系统软件,性能同样很关键。靠近机器的底层硬件的操纵能力也很重要,C++ 具有这种能力。 开始学习 C++ 之前 虽然任何人都可以学习 C++ 编程,但具有一些基础的编程经验可能会有所帮助。对于 C++ 和 JavaScript、Python 等语言常见的语句、for 循环、while 循环和其他代码结构等基本计算机术语的了解会对快速学习很有用。 对于初学者来说,我认为理解语法,能够编写一个简单的程序,然后打印一些内容,并能够解释每行代码都在做什么,以及了解数据类型这些都很有帮助。 学习资源和参考资料 但是如果你没有这些基本技能怎么办?不要害怕,目前在互联网上有非常多资源可以帮助你入门。 比如 W3Schools.com 和 Codecademy 等入门教程网站。 第一步:学习语法并上手一些教程 语法是编程语言的表达文法,也是所有代码的基础。语法还定义了代码的组成和理解方式。 以下是一些例子,创建一个简单的代码行来打印文本 “Hello World”: #include <iostream> using namespace std; // main () 程序开始执行的地方 Int main () { cout << “Hello World\n” ; // 输出到屏幕 Hello World return 0; } #include <iostream> 这是一个头文件库,将其中包含的特性导入程序。该命令要求程序从一个名为 <iostream> 的文件中复制内容,iostream 代表输入和输出流。 Using namespace std 声明将引用标准库(std)中的对象和变量名称,应用时经常缩写为关键字 std 和操作符 ::。 int main( ) 指定一个主函数。函数是 C++ 程序的重要部分,因为它们定义了代码中的一个动作。包含在这些大括号 { } 中的命令将被执行。 cout(读作see-out)是一个定义输出的对象,可输出代码中的一串文字。利用操作符 << 可串行输出多个字符串。\n 将使后边的文本输出换行。 return 0 指示程序不会返回任何内容,上面的文本字符串将是唯一的输出。 << 是一个命名对象的操作符而 ;(分号)作为代码行的结束符。 第二步:练习基础知识 掌握语法后,一个初学者应该了解语言的更多方面。比如: 函数:函数是一组语句,共同完成一个任务。每个 C++ 程序至少有一个函数– main 函数。 数组:数组是一种数据结构,用于存储相同类型元素的数据集合,大小固定,而且数据排列顺序。 字符串:字符串是以空字符‘\0’结尾的字符的一维数组。 指针:指针一种变量,其值为其他变量地址。指针有助于更灵活地执行 C++ 任务,有些任务非常依赖指针来完成。 引用:引用是变量的别名,是已经存在的变量的另一个名称。如果引用已通过变量初始化,那么变量的名称和引用名称可以互换使用。 类和对象:类是 C++ 的一个关键特性,通过将数据表示和操作数据的方法结合成一个包来指定对象的形式。类提供了用于创建对象的蓝图或者抽象概念。 多态性:多态性意味着具有多种形式。在 C++ 中,形象地理解指的是调用一个函数,但执行的却是不同的函数,具体取决于调用函数的对象类型。 第三步:将知识付诸实践 学习了一些 C++ 编程技能后,就应该将它们应用到实践中了。其中一种方法是通过开展项目来了解语言的各个方面是如何结合在一起的。有许多网上的开源项目可以提供想法,比如编写简单的游戏或构建银行应用程序。 此外,还有许多在线社区专门讨论和应用 C++,因此你可以与业余爱好者、兼职程序员或专业人士联系。 第四步:深入学习高级 C++ 中级和高级 C++ 编程技能建立在基础知识之上,同时为程序员提供了一系列辅助工具。在中级水平时,程序员需要理解引用和指针的工作原理。支持强大的 C++ 函数的其他核心概念包括对象生命周期和多态性。对这些概念的深刻理解以及如何创建和使用库函数将使程序员能够学习高级技术。 在高阶水平,优秀的 C++ 程序员可以摆脱面向对象编程,利用更通用的泛型编程。面向对象编程并没有错,仍然有数以百万计的程序员在使用这些编程思想,但是优秀的程序员会将他们的技能提升到一个新的水平。 已经进阶的程序员正在使用泛型编程,并且使用编译时来增强代码的运行时控制。高阶开发人员正在编写通用的代码,以便可以轻松地适应多个平台。 C++ 与 Java,有何不同? C++ 和 Java 经常被认为是竞争关系的两种编程语言,但它们用于不同类型的编程。Java 使用虚拟机——模仿硬件的软件——来执行各种功能,因此无需重新编译的情况下,它开发的程序就可在多个平台上直接运行,比如 Windows、Linux、Mac、Android 和 Apple iOS 等。 C++ 也是跨平台的,但它需要为每个系统单独编译一个程序才能运行。C++ 的优势在于它能够编写内存高效的应用程序,这些应用程序直接操作内存地址也可能带来安全隐患。 现实是,互联网时代更看重通用兼容性,这使得 Java 非常受欢迎。而专注在内存和性能效率时的,就是 C++ 的优点所在。 如何成功学习 C++ 学好语法。 掌握基础知识,如函数、数组、字符串、类等。 利用在线教程、书籍和讲座等资源。 坚持不懈。编码和许多其他技能一样,需要时间学习,所以犯错误很正常,不要害怕。 ...

    2023-12-22 值得一看 124
  • linux启动流程步骤详解

    Linux是怎么启动的? 几乎每个软件工程师都用过 Linux,但并不是每个人都知道它的启动过程,让我们深入了解一下。 下图给我们展示了具体步骤。 第1步 当我们打开电源时,BIOS(基本输入/输出系统,Basic Input/Output System)或 UEFI(统一可扩展固件接口,Unified Extensible Firmware Interface)固件会从非易失性内存中加载,并执行 POST(开机自检,Power On Self Test)。 第2步 BIOS/UEFI 检测连接到系统的设备,包括 CPU、内存和存储设备。 第3步 选择一个启动设备来启动操作系统。 可以是硬盘、网络服务器或 CD ROM。 第4步 BIOS/UEFI 运行引导加载器 (GRUB),它提供了一个选择操作系统或内核功能的菜单。 第5步 内核准备就绪后,我们现在切换到用户空间。 内核启动 systemd 作为第一个用户空间进程,负责管理进程和服务、探测所有剩余硬件、挂载文件系统并运行桌面环境。 第6步 系统启动时,systemd 默认激活 default.target 单元。 同时还会执行其他分析单元。 第7步 系统运行一组启动脚本并配置环境。 第8步 用户将看到一个登录窗口。 系统现已准备就绪。 ...

    2023-12-22 技术教程 189
  • 某博今夜浴巾.大赛✨ ​​​

    点击围观  ...

    2023-12-22 福利分享 132
  • 某博冬季自拍.大赛✨ ​​​

    点击围观  ...

    2023-12-22 福利分享 118
  • 某博ootd吊群.大赛✨ ​​​

    点击围观  ...

    2023-12-22 福利分享 118
  • 闲鱼赚钱的20个技巧总结

    大部分小伙伴在操作闲鱼的时候肯定还有疑问,不知道该怎么才能放大好好操作。那么今天裂变哥就把我自己操作过程中总结的一些经验跟技巧分享给大家,废话不多说,直接上干货: 1.首先定价 价位要符合商品的价值也要符合市场价,不然是没有交易的,适当的打折才是真理。 2.商品发布 发布之后一定要在线,这个时候闲鱼给我们扶持曝光是最高的,做到及时回复消息才能做到更好的交易。 3.一定要做免费送 因为免费送的流量是非常大的,而且它的一个曝光也是非常高的,做到引流客户的目的。 4.图片,尤其是首图。 内容一定要到非常美观,这样我们把客户引流到店铺之后,客户才会来购买我们别的产品。 5.时刻关注 要时刻保持关注闲鱼,做到对客户的消息秒回复,来提高我们账号的活跃度,这样闲鱼会给我们扶持,从而给我们大量的流量。 6.产品图片 图片最好是保持在九张。 7.观察用户 多注意用户的浏览时间。放短片上去,用户浏览我们的商品时间越久,那么闲鱼才会给我们更多的流量。 8.优化标题 标题不要抄袭别人的,我们可以对同行的标题进行适当的更改来形成我们自己的标题。 9.商品发布 每晚七点后速度上新完10个产品,因为这个时候流量很大,新品更容易爆。 10.及时回复 流量多的时候,对于客户的留言也要做到及时回复,当宝贝卖出的时候也要做到及时的上架,因为宝贝卖了这个链接就没了。 11.擦亮 每天给宝贝进行擦亮,适当的给商品进行编辑,这样才能获得新的曝光量。 12.偏爱年轻化 选择卖出的商品也要更倾向于年轻化,毕竟年轻的用户比较多。 裂变哥给出选品参考的以下三个因素: ①成本低,利润高。(这是最理想的状态) ②卖价不高,几十块到一两百。买家对小店、非品牌店的信任度低,便宜是为了降低买家决策成本。就算是暂时的失利,也不至于伤到根本。 ③尽量选择那些没有大品牌的品类,比如小白鞋清洗剂、手机支架、手机壳、太阳镜夹片等等。没有大品牌才可以一直被模仿,一直都能超越。 13.单价高 选择卖出单价高的数码产品的时候,在描述里面加上个人自用,这样会更容易的卖出,也可用裂变哥整理的黄金甲的套路 14.产品更替 每天做到对流量低的产品进行更替,重新发布新的产品,更替数量在10个。 15.账号的权重 当我们账号的权重提高了之后,那么每天的流量是不会停的,所以一定要注意提高账号的权重。 16.工匠精神 多注意自己产品的一些细节,不能太随意。 17.关注同行 多分析同行的产品,多做对比。 18.尽快发货 退款太多的话会被降低权重的,所以发货速度一定要快。 19.一点突破,全面放大 先建议把一个店铺做起来,稳定之后再去选择放大。 20.二选一 话术的关键性就不要多说了,话术回复要做到让客户做选择,做到引导性的下单。 今天分享就到这里。 ...

    2023-12-20 赚钱项目 207
  • 中视频最新玩法,纯项目,项目长久小白易上手,全职保底月入过w

    中视频项目是抖音的一个长久的项目,也是小白可以玩的副业,非常简单,一小时就能上手, 普通小白全职可以月入1-3W,但是目前很多人找不到正确的赛道,比如说影视剪辑、解说、民间故事 ,等等,赛道卷,收益低,入手难,我们现在做的是音乐号,起号非常快,收益高,可以矩阵操作门槛非常低,只需要你会找材就足够,利用热门音乐带动视频数据,视频数据好,我们的收益也不会差.吸粉能力强,起号之后变现能力非常稳定,适合  宝妈,宝爸 有业余时间的上班族 大学生。 课程目录: 第一节课项目介绍.mp4 第二节课前期准备工作.mp4 第三节课制作实操.mp4 第四节课变现方式.mp4 ...

    2023-12-20 赚钱项目 184

联系我们

在线咨询:点击这里给我发消息

QQ交流群:KirinBlog

工作日:8:00-23:00,节假日休息

扫码关注