首页 文章 精选 留言 我的

精选列表

搜索[其他],共10021篇文章
优秀的个人博客,低调大师

要点及其他

类的加载顺序 1. 静态属性和静态块(按书写顺序) 2. 非静态属性和非静态块(按书写顺序) 3. 构造方法 4. 被调用的方法(无论静态非静态) 使Android应用国际化的步骤: 1. 新建Android XML file 2. 选择type为values 3. 选择语言码和区域码, 语言码设置为en或zh 区域码设置为US或CN 4. 新增的字符串的key要一致 测试方法:设置当前系统的语言,应用会根据当前 操作系统的语言选择不同的values目录中的字符串 定义String数组的方法: 在values中添加string array 代码中:String[] strArr = getResources().getStringArray(R.array.names); 通过字符串的resid得到String: String string = getResources().getString(R.string.aaa); double数保留小数点两位的妙招: 1 2 double d = 13.4324 ; d=(( int )(d* 100 ))/ 100 ; 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1195816,如需转载请自行联系原作者

优秀的个人博客,低调大师

ConcatAdapter 顺序连接其他 Adapter

ConcatAdapter 是 recyclerview: 1.2.0-alpha 04 中提供的一个新组件,它可以帮我们顺序地组合多个 Adapter,并让它们显示在同一个 RecyclerView 中。这使您可以更好地封装 Adapter。您不必再将许多数据源组合到一个 Adapter 中,从而在减少 Adapter 复杂度的同时也让它们可以被复用。 这方面的一个用例,是在列表头部和底部显示加载状态:当列表从网络中检索数据时,我们想显示一个加载中的图标;如果出现错误,我们要显示错误信息和重试按钮。 △ 一个带有底部的 RecyclerView,底部显示了加载状态:加载进度或错误信息 ConcatAdapter 简介 ConcatAdapter 让我们可以顺序显示多个 Adapter 中的内容。例如,假设我们有下面三个 Adapter: val firstAdapter: FirstAdapter = … val secondAdapter: SecondAdapter = … val thirdAdapter: ThirdAdapter = … val concatAdapter= ConcatAdapter(firstAdapter, secondAdapter, thirdAdapter) recyclerView.adapter = concatAdapter RecyclerView 将会按 Adapter 顺序显示所有的项目。 使用不同的适配器可以使您更好地区分列表的每个部分。例如,如果要显示一个头部,可以将其封装在它自己的 Adapter 中,而无需把头部的逻辑与处理列表显示的 Adapter 混杂在一起。 △ RecyclerView 和 Adapter 数据 在头部和底部显示加载状态 我们可以在头部或底部显示一个进度条或错误信息。列表成功加载数据后,头部或底部便不应该再显示任何信息。这样一来,它们就可以用 Adapter 实现有 0 个或 1 个项目的列表: val concatAdapter = ConcatAdapter(headerAdapter, listAdapter, footerAdapter) recyclerView.adapter=concatAdapter 如果头部和底部用的是同一布局、ViewHolder 和 UI 逻辑 (例如: 进度条要何时显示、怎么显示),您可以只实现一个 Adapter,然后创建两个实例: 一个作为头部、一个作为底部。 要获得完整的实现,请查看这里 拉取请求,它添加了: 从ViewModel 中暴露出来的 LoadState 显示加载状态的头部和底部的布局 头部和底部的 ViewHolder 对象 一个 ListAdapter,它基于 LoadState 显示 1 或 0 个项目,每次 LoadState 有变动的时候,我们会通知相应条目进行改动、插入或移除 (您可以在 拉取请求 中查看相应的代码)。 🔎 更多关于 ConcatAdapter 的信息 ViewHolder 默认情况下,每个 Adapter 维护它们自己的ViewHolder池,在 Adapter 之间不会进行复用。但如果多个 Adapter 使用的是同一种 ViewHolder,我们可能会想要在 Adapter 间复用 ViewHolder 的实例。我们可以在构造 ConcatAdapter 时使用一个ConcatAdapter.Config对象来实现这样的效果。只要设置isolateViewTypes =false,就可以让所有合并进来的 Adapter 使用同一个视图池。在显示加载状态的头部和底部的例子中,两种 ViewHolder 事实上使用的是相同的内容,所以我们可以复用它们。 ⚠️如果要支持不同的 ViewHolder 类型,您应该实现 Adapter.getItemViewType方法。当您复用 ViewHolder 时,确保同一视图类型没有对应不同的 ViewHodler!防止出现这个问题的最佳实践之一,便是将布局 ID 作为视图类型返回。 <!-- Copyright 2019 Google LLC. SPDX-License-Identifier: Apache-2.0 --> class HeaderAdapter() : RecyclerView.Adapter<LoadingStateViewHolderHeaderViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return LoadingStateViewHolder(parent) } override fun getItemViewType(position: Int): Int { - return 0 + return R.layout.list_loading } } class FooterAdapter() : RecyclerView.Adapter<LoadingStateViewHolderFooterViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return LoadingStateViewHolder(parent) } override fun getItemViewType(position: Int): Int { - return 0 + return R.layout.list_loading } } 使用 stable id 相比于使用 stable id 搭配notifyDataSetChanged,我们更建议使用 Adapter 的特定通知事件,该事件可以为RecyclerView 提供更多有关数据集更改的信息,从而使 RecyclerView 可以更有效率地更新 UI,同时也有更好的动画效果。如果您正在使用ListAdapter的话,其内部会使用DiffUtil回调帮您处理通知事件。但是如果您需要使用 stable id,ConcatAdapter.Config 为其提供了三种不同的配置: NO_STABLE_IDS、ISOLATED_STABLE_IDS和SHARED_STABLE_IDS。其中后面两种需要您自己处理 Adapter 中的 stable id。您可以查看StableIdMode文档来获得更多关于其工作原理的信息。 数据变更通知 当 ConcatAdapter 中的一个 Adapter 调用了通知函数时,ConcatAdapter 会在更新 RecyclerView 之前计算新的项目位置。 从 RecyclerView 的角度来看,notifyItemRangeChanged表示更新的项目相同,只是内容有所更改;notifyDataSetChanged表示前后数据之间没有任何关系。因此,我们无法将 notifyDataSetChanged 映射到 notifyItemRangeChanged 中。 如果一个 Adapter 调用了 Adapter.notifyDataSetChanged,则 ConcatAdapter 也会调用Adapter.notifyDataSetChanged,而不是 Adapter.notifyItemRangeChanged。与 RecyclerViews 一样,我们要选择更精细的更新操作,一般情况下避免调用 Adapter.notifyDataSetChanged()。也可以使用自动执行此操作的 Adapter 实现,例如ListAdapter或SortedList。 查找 ViewHolder 位置 您可能使用过ViewHolder.getAdapterPosition来获得 Adapter 中某个 ViewHolder 的位置。现在,因为我们合并了多个 Adapter,作为代替,您需要调用ViewHolder.getBindingAdapterPosition()。如果您想在共享 ViewHolder 的情况下获得最后一个绑定某个 ViewHolder 的 Adapter,可以使用ViewHolder.getBindingAdapter()。 以上就是全部了!总结一下: 如果要顺序显示不同类型的数据的同时,也希望这些数据能够封装在它们自己的 Adapter 中,请开始使用 ConcatAdapter;如果想要更进一步对 ViewHolder 池和 statle id 进行高级控制,则要使用 ConcatAdapter.Config。

优秀的个人博客,低调大师

Android如何引用其他工程

Referencing a library project If you are developing an application and want to include the shared code or resources from a library project, you can do so easily by adding a reference to the library project in the application project's Properties. To add a reference to a library project, follow these steps: In thePackage Explorer, right-click the dependent project and selectProperties. In thePropertieswindow, select the "Android" properties group at left and locate theLibraryproperties at right. ClickAddto open theProject Selectiondialog. From the list of available library projects, select a project and clickOK. When the dialog closes, clickApplyin thePropertieswindow. ClickOKto close thePropertieswindow. As soon as the Properties dialog closes, Eclipse rebuilds the project, including the contents of the library project. Figure 2 shows the Properties dialog that lets you add library references and move them up and down in priority. Figure 2.Adding a reference to a library project in the properties of an application project. If you are adding references to multiple libraries, note that you can set their relative priority (and merge order) by selecting a library and using theUpandDowncontrols. The tools merge the referenced libraries with your application starting from lowest priority (bottom of the list) to highest (top of the list). If more than one library defines the same resource ID, the tools select the resource from the library with higher priority. The application itself has highest priority and its resources are always used in preference to identical resource IDs defined in libraries. Declaring library components in the the manifest file In the manifest file of the application project, you must add declarations of all components that the application will use that are imported from a library project. For example, you must declare any<activity>,<service>,<receiver>,<provider>, and so on, as well as<permission>,<uses-library>, and similar elements. Declarations should reference the library components by their fully-qualified package names, where appropriate. For example, theTicTacToeMainexample application declares the library ActivityGameActivitylike this: <manifest> ... <application> ... <activityandroid:name="com.example.android.tictactoe.library.GameActivity"/> ... </application></manifest> 按如下方法设置: 1. 假设要引用的android工程叫LibProject,引入到的工程叫MainProject; 2. 设置LibProject,右键->Properties->Android,将Is library项选中,然后Apply; 3. 设置MainProject,右键->->Properties->Android, 在Library中,点击Add按钮,将LibProject工程加入,Apply即可。 设置完成后,在MainProject工程中能看到LibProject的代码等资源都已经引入进来。 本文转自 sw840227 51CTO博客,原文链接:http://blog.51cto.com/jerrysun/804910,如需转载请自行联系原作者

优秀的个人博客,低调大师

GodoOS 与其他办公软件对比

1. 功能集成 GodoOS:内置了Word、Excel、PPT、PDF阅读器等常用办公软件,同时加入了内网聊天、白板、思维导图等工具,提供了一站式的解决方案,减少了在多个软件间切换的麻烦。 Microsoft Office:提供了Word、Excel、PowerPoint等核心办公软件,但需要额外安装Teams等工具来进行即时通讯和协作。 WPS Office:类似于Microsoft Office,提供了文档处理、电子表格和演示文稿等功能,也有在线协作工具,但功能集成度不如GodoOS高。 2. 界面设计 GodoOS:模仿Windows风格,操作直观简便,适合初次使用的用户快速上手。 Microsoft Office:界面设计现代化,功能区划分明确,但初次使用可能需要一定的学习成本。 WPS Office:界面设计与Microsoft Office相似,易于用户迁移和使用。 3. 资源消耗 GodoOS:保持了极低的资源消耗,确保高性能运行,即使是老旧设备也能流畅使用。 Microsoft Office:资源消耗相对较高,尤其是在处理大型文件或多任务处理时。 WPS Office:资源消耗介于Microsoft Office和GodoOS之间,轻量化程度较高。 4. 安装与配置 GodoOS:实现了零配置安装,无需繁琐的注册过程,下载后即可直接使用。 Microsoft Office:安装过程较为复杂,需要进行账户注册和激活。 WPS Office:安装过程相对简单,但也需要进行账户注册和激活。 5. 跨平台支持 GodoOS:支持多平台运行,包括Windows、Linux和MacOS,提供一致的办公体验。 Microsoft Office:主要支持Windows和MacOS,也有移动端应用,但跨平台一致性不如GodoOS。 WPS Office:支持Windows、MacOS、Linux以及移动端,跨平台支持较好。 6. 扩展性 GodoOS:具有应用商店体系,可以根据团队需求定制专属应用,灵活性高。 Microsoft Office:通过Microsoft Store和第三方插件扩展功能,但定制化程度有限。 WPS Office:也有应用商店和插件支持,但扩展性和灵活性不如GodoOS。 7. 开源与免费 GodoOS:完全开源,用户可以自由使用,无需担心版权问题。 Microsoft Office:闭源软件,需要购买许可证或订阅服务。 WPS Office:提供免费版和付费版,免费版功能有限。 总结 GodoOS以其高度集成的功能、低资源消耗、多平台支持和开源特性在办公软件市场中占据了一席之地。相比传统的办公软件如Microsoft Office和WPS Office,GodoOS更适合需要一站式解决方案和高度定制化需求的用户。 询问AI

优秀的个人博客,低调大师

你想了解Python中的 == 和IS 其他

前言 比较对象值时使用 == 等逻辑操作符,比较的是对象的值;比较对象身份时使用 is 和 is not 操作符,比较的是对象的本身,即可理解为对象的地址,该地址可以由id()函数获得。 理解过程中可以类比 C 语言中变量的比较,例如对于变量 a 和 b,比较值相当于 a == b,比较身份相当于 &a == &b,即对两个变量分别取地址,之后比较这两个地址。 Python 中使用大量使用引用赋值。通过 b = a 的操作,C 语言中是将 a 的值赋给 b,两个变量的地址不同;Python 中则通过引用赋值,直接使 b 和 a 指向相同的地址,这样就可以复用内存,使得存储更高效。 不过在使用过程中,对于不可改变类型,或者表述为“标量存储类型”,这个操作对于用户是透明的,即对于用户来说相当于普通复制赋值,如下。使用 b = a 赋值后,可以看到,两个变量的 id 是相同的,即内存中地址相同。改变 b 的值后可以看到,系统自动给 b 分配了新的地址空间,改变 b 并没有引起 a 的改变。 >>> a = 1 >>> b = a >>> id(a) 29667592L >>> id(b) 29667592L >>> b += 1 >>> a 1 >>> b 2 >>> id(a) 29667592L >>> id(b) 29667568L 对于可变类型,Python 真的是使用引用赋值,如下。可以发现对于 list 类型,改变了 b 的值后 a 也随之改变,两个变量的地址是相同的。 >>> a = [1, 2] >>> b = a >>> id(a) 34412232L >>> id(b) 34412232L >>> b += [3] >>> a [1, 2, 3] >>> b [1, 2, 3] >>> id(a) 34412232L >>> id(b) 34412232L 若需要对于 list 类型使用复制赋值,需要使用技巧 b = a[:],此时系统会为 b 分配新的地址,并赋予之一份 a 的拷贝,如下。 >>> a = [1, 2] >>> b = a[:] >>> a [1, 2] >>> b [1, 2] >>> id(a) 34520264L >>> id(b) 34520456L >>> b += [3] >>> a [1, 2] >>> b [1, 2, 3] >>> id(a) 34520264L >>> id(b) 34520456L Python 中对于内存的管理是自动的,不需要程序猿参与。系统对于每个变量的内存空间添加了一个计数器,没增加一个引用,即有新的指针指向这个地址时,就对计数器加一,反之减一。当计数器的值为 0 时,系统回收这块内存。当使用 del 操作时,直接将该变量所在内存的计数器置为 0,即直接删除之。 这种管理方式在 Linux/Unix 的文件系统中也在使用,*nix 系统采用 inode 格式来管理文件。这种管理方式采用唯一的 id 来标识文件,而文件名只是一个普通属性,因此可以在文件打开过程中修改文件名。每当对于文件创建一个新的硬链接,系统就会将文件的计数器加一,当计数器的值为 0 时,表示文件被删除。 小编推荐一个学python的学习qun 740322234无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

优秀的个人博客,低调大师

Maze勒索软件与其他威胁组织建立“垄断”

即将开播:6月19日,互联网银行架构师魏生谈互联网开放银行实施路径的探索与思考 即将开播:4月29日,民生银行郭庆谈商业银行金融科技赋能的探索与实践--> 自2019年11月以来,Maze勒索软件背后的组织一直在通过面向公众的网站公开受害者的数据,但最新信息表明各种勒索软件团伙现在正在合作共享资源并勒索受害者。 6月5日,一家国际建筑公司的信息和文件被发布到Maze的数据泄漏网站;但是,这些数据并非在Maze勒索软件攻击中被盗,而是来自另一个名为LockBit的勒索软件攻击。 Bleeping Computer最先报道了这个事情,后来这一消息得到Maze组织的确认,他们正在与LockBit合作,并允许该组织在Maze的“新闻网站”上共享受害者数据。Maze组织还表示,未来几天,该新闻网站还将发布另一种勒索软件获取的数据。 三天后,Maze添加了另一个竞争的勒索软件组织Ragnar Locker的受害者的数据。Maze网站上的帖子引用的是“Maze联盟—由Ragnar提供”。 Maze组织是最早采用窃取数据并将传统勒索与勒索软件相结合策略的犯罪组织。他们不仅泄露受害者的数据,而且还创建了面向公众的网站,以迫使受害者支付赎金。 Trustwave公司网络威胁检测与响应副总裁Brian Hussey表示,数据泄露以及羞辱受害者是日益增长的趋势。他说,攻击者在加密所有公司数据前会先窃取这些数据,然后将这些数据缓慢发布给公众。 Hussey称:“毫无疑问,我们看到的威胁有所增加,对威胁的实际执行并不像我所看到的那样多。但是很多时候,这确实迫使受害者支付更多的费用。” 在Maze网站上,数十个受害者的名字被列出来,但在该组织的勒索软件受害者中,只有10个客户信息被“完整曝光”。这意味着大多数被Maze勒索的组织已经支付赎金,以防止其机密数据的发布。 Rapid7首席安全研究员Wade Woolwine也观察到了这种羞辱策略的增加。Woolwine和Hussey都认为,勒索软件团伙策略的转变是因为企业开始投入更多时间和精力进行备份。 Woolwine在给SearchSecurity的电子邮件中说:“我曾经认为,很少会有受害者支付赎金,因为企业已经提高其能力,他们可快速恢复受感染的资产并从备份中快速恢复数据。” Hussey说,作为托管安全服务提供商,Trustwave建议的主要内容之一就是要部署智能的精心设计的备份过程。 Hussey称:“勒索软件团伙的这些新手段是对企业备份做法的响应,企业正通过正确部署备份来减轻勒索软件风险。这些手段是有效的。很多公司投资于备份解决方案并设计备份解决方案,以防止受到这种持续的勒索软件的威胁。然而,现在即使企业有备份数据也无济于事,因为攻击者先窃取数据,然后再威胁发布私有信息,这是这新的威胁形式。” Woolwine说,当攻击者成功入侵到达端点并可以访问数据时,他们会考虑有必要窃取数据,因为这可进一步诱使企业付费以解密数据。并且,攻击者特别关注企业网络中最敏感的数据类型。 Woolwine说:“最初,我们看到攻击者使用像Cobalt Strike这样的攻击工具包来手动查找其感兴趣的特定文件。我说的是‘查找’,Windows搜索功能(尤其是在端点连接到企业文件服务器的情况下)足以识别诸如‘NDA’、‘合同’和‘机密’之类的文件。最近,我们已经看到了这些搜索脚本,因此它们可以更快地执行。” 据Woolwine称,对于大多数勒索软件攻击而言,网络钓鱼和路过式攻击仍然是首选的传播媒介,但这些技术也在发生变化。 Woolwine说:“我们还看到,攻击者开始瞄准未及时修复漏洞的特定面向互联网的系统,并以暴力破解身份验证方式瞄准RDPserver。无论哪种情况,一旦漏洞被利用或凭证被猜测到,攻击者将在断开连接之前安装勒索软件。这种手段的增加很可能是由于从赎金到数据泄露的转变。攻击者关注的不再是可以感染多少台计算机,而是感染可访问最多数据的计算机。” Hussey说,这些新手段很令人诧异,但它们是勒索软件发展过程中的下一个合乎逻辑的步骤,他预计将来有更多攻击者采用这种做法。 【责任编辑: 赵宁宁 TEL:(010)68476606】

优秀的个人博客,低调大师

【C语言】学习笔记10——其他数据结构

1. 联合:能在同一内存空间中存储不同的数据类型(不是同时存储)。典型用法是,设计一种表以存储既无规律、事先也不知道顺序的混合类型。 下面是一个代表及的联合模板 union hold { int digit; double bigfl; char letter; } 根据以上形式声明的类型可以存储一个int类型或一个double类型或一个char类型的值。 2. 枚举类型:可以使用枚举类型声明符号名称来表示整型常量。 使用 enum 关键字, 可以创建一个新“类型”并指定它可具有的值。 enum spectrum {red, orange. yellow, green. blue, violet}; enum spectrum color; 枚举符是int类型,但是枚举变量可以是任意整数类型,前提是该整数类型足够长,可以存储所有的枚举常量。比如 spectrum 的枚举符范围是0~5, 所以编译器可以用 unsigned char 来表示color变量 C允许枚举变量使用 ++ 运算符,但是C++标准不允许 3. 在枚举声明中,可以为枚举常量指定整数值 enum levels {low = 100, medium = 500, high = 2000} 如果只给一个枚举常量赋值,后面的常量没有被赋值 enum feline(cat, lynx = 10, puma, tiger) // cat = 0, lynx = 10, puma = 11, tiger = 12 4. typedef: 类似别名,或者说更接近于包装

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册