- 原生 iOS 引入 Flutter 报错 kernel_blob.bin 找不到
我码玄黄
Flutter入门IOS开发教你一招iosflutter
情况在一次原生iOS项目中引入Flutter的过程中,在模拟器中运行出现报错:未能打开文件“kernel_blob.bin”,因为它不存在。如下图:模拟器中一片黑原因&解决方案这个是因为Flutter的打包iOSframework命令中把debug排除了模拟器运行时应该引入debug文件夹的framework,引入release包就会报错修改命令为:flutterbuildios-framewor
- Flutter的升级和降级步骤
AiFlutter
flutter
升级1.版本升级//升级到指定版本flutterupgrade版本号//升级到最新版本flutterupgrade2.更新开发配置启动AndroidStudio。打开Settings对话框,查看SDKManager。如果你已经打开了一个项目,请打开Tools>SDKManager。如果显示WelcometoAndroidStudio的对话框,请单击Open按钮后面的MoreOptions图标,然后
- flutter Sliver
CaptainRoy
Sliverimport'package:flutter/material.dart';voidmain()=>runApp(MyApp());classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){//TODO:implementbuildreturnMaterialApp(home:Scaffold(
- 深入浅出Flutter(一)
小时候很拽的样子
Flutter简介Flutter是Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过Dart语言开发App,一套代码同时运行在iOS和Android平台。Flutter提供了丰富的组件、接口,开发者可以很快地为Flutter添加Native扩展。由于背靠google,技术上支撑是足够的,且已经支持iOS、Android、Web、Windows、macOS、Linu
- android和ios混合开发工具,Flutter与已有iOS工程混合开发与脚本配置
乐居买房
运行一个原生的Flutter工程(也就是纯Flutter)非常简便,不过现在Flutter属于试水阶段,要是想在商业app中使用Flutter,目前基本上是将Flutter的页面嵌入到目前先有的iOS或者安卓工程,目前讲混合开发的文章有很多:不过这些文章大多讲的是安卓和flutter混合开发的,没有iOS和Flutter混合开发的比较详细的步骤实操,上周试了一下iOS和Flutter混合,有一些坑
- Flutter MVVM 架构:打造高效可复用的移动应用
吕真想Harland
FlutterMVVM架构:打造高效可复用的移动应用项目介绍FlutterMVVMArchitecture是一个基于Flutter的开放源代码项目,旨在实现Model-View-ViewModel(MVVM)设计模式。通过这个简单易懂的例子,开发者可以快速掌握如何在自己的项目中应用MVVM,从而提高软件开发的效率和代码质量。项目提供了详细的示例代码和截图,让开发者能够直观地理解MVVM如何在Flu
- 使用 Flutter 实现 MVVM 架构
陆业聪
flutter架构
文章目录一、什么是MVVM架构?二、MVVM架构设计三、代码案例3.1Model3.2ViewModel3.3View四、扩展MVVM架构4.1引入服务层4.2使用依赖注入4.3状态管理4.4遵循最佳实践五、实战案例:待办事项应用5.1Model5.2服务层5.3ViewModel5.4View六、使用Riverpod库实现一个基于MVVM架构的计数器应用6.1Model6.2ViewModel6
- HCIA学习日志-eNSP学习小记
不渡云山
eNSPHCIA学习
eNSP配置一、配置视图配置视图大概可以分四类(不是):用户视图、系统视图、接口视图、路由视图用户视图::#用户视图系统视图::system-view/sys#用户视图进系统视图[Huawei]:#系统视图接口视图::system-view/sys#用户视图进系统视图[Huawei]:interface/intEthernet0/0/1#系统视图进接口视图[Huawei-Ethernet0/0/1
- 轻松flutter之 网络请求DIO
熊爸天下_56c7
这是比http库更强大的库哦https://pub.dev/packages/diohttps://github.com/flutterchina/dio/blob/master/README-ZH.md将http文章中的例子改造成dioimport'package:flutter/material.dart';import'package:dio/dio.dart';voidmain()=>ru
- Flutter | 异常处理
Tʀᴜsᴛ³⁴⁵
FlutterFlutter异常处理
本文示例代码在了解Flutter异常捕获之前需要先了解一下Dart的异常处理以及Dart的单线程模型,只有知道了代码的执行流程,我们才能只要该在什么地方去捕获异常Dart中的异常Dart可以抛出和捕获异常,如果没有被捕获,则会抛出,最终导致程序终止运行和Java不同,Dart中的所有异常时非检查异常,方法不会声明它们抛出的异常,也不要求捕获任何异常Dart提供了Exception和Error类型,
- Flutter之命名路由页面传值
Harvey_DH_
flutterjava前端
一.在风格组件MaterialApp内的routes可选参数中创建命名路由MaterialApp{.....//其他代码无关home:MyHomePage()routes{//在routes中注册路由"new_SearchPage":(context)=>newPage()//注册一个路由器名称}}提示:"new_SearchPage"是命名路由的名称。二.在点击按钮的时候,响应Push路由器跳转
- flutter Timer报错
hudawei996
flutterjavascript前端
报错一:_timer没有被初始化需求:按键之后才开始计时,如果一进来就初始化,就会立马计时,不符合要求。所以要按键完之后才初始化_timer。所以就需要用var或者dynamic这种不确定类型,来修饰_timer变量,late会报没有初始化//lateTimer_timer;//TODO这样写会报:没有初始化dynamic_timer;//orvar来修饰_timer;报错二:[ERROR:flu
- flutter面试,20道Android工程师面试必问题,移动架构师成长路线
左夜天
程序员android
前言准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司。谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去,不愿意的就自己找工作,给了一个多月的时间找工作,就没有赔偿了,反正公司也没钱。悲哀….幸好提前准备过,不过都是断断续续的今天看点这个,明天看点那个,三天打鱼两天晒网的,也没用心去准备.这下好了,直接到了最差
- Flutter架构模式示例:构建高效应用的蓝图
乌芬维Maisie
Flutter架构模式示例:构建高效应用的蓝图flutter_architecture_samplesTodoMVCforFlutter项目地址:https://gitcode.com/gh_mirrors/fl/flutter_architecture_samples在这个快速发展的移动开发世界中,Flutter以其强大的功能和灵活性吸引了开发者的眼球。为了帮助你充分利用这个平台,我们推出了一个
- Flutter 架构蓝图教程
瞿旺晟
Flutter架构蓝图教程flutter-architecture-blueprintsFlutterArchitectureBlueprintsisaprojectthatintroducesMVVMarchitectureandprojectstructureapproachestodevelopingFlutterapps.项目地址:https://gitcode.com/gh_mirror
- Flutter学习记录-基础控件
薰舞空
statelesswidget没有内部状态.Icon、IconButton,和Text都是无状态widget,他们都是StatelessWidget的子类。statefulwidget是动态的.用户可以和其交互(例如输入一个表单、或者移动一个slider滑块),或者可以随时间改变(也许是数据改变导致的UI更新).Checkbox,Radio,Slider,InkWell,Form,andTextF
- unit4
徐胜鑫
1,从本单元中我学到的最重要的理念(精读和视听说分别总结)精读:要对生活抱有希望,珍视自己的生命视听说:连读很多2,我在本片文章/音频/视频中学到的怦然心动的单词(精读和视听说分别总结)视听说:nonsensebaremasterpiecebishopstalklandscapeimprovisation精读:worldfaireconomyfragileendurefancyfluttersta
- 自学成才Flutter 弹性布局、线性布局
高级技术工程师
flutterflutter
本文我们要介绍Flutter中布局Widget,包括弹性布局、线性布局流式布局和层叠布局。Flutter中文网Flutter开发一、弹性布局--FlexFlex类似Android中的FlexboxLayout,和Expanded配合使用可以实现子Widget按照一定比例来分配父容器空间。使用:Flex(direction:Axis.horizontal,children:[...],)其中dire
- flutter 安卓打包自定义名字
肥肥呀呀呀
android
打包的名字如app.1.0.1_relase_201283893.apk打包命令flutterbuildapk实现配置安卓项目的中的build.gradle(android/app/build.gradle)新增android{内applicationVariants.all配置applicationVariants.all{variant->variant.outputs.all{defappN
- Flutter之CRC校验
AiFlutter
网络
在线CRC校验网站链接:OnlineCRC-8CRC-16CRC-32CalculatorSunshine'sHomepage-OnlineCRCCalculatorJavascript1.CRC算法介绍CRC(CyclicRedundancyCheck)校验算法是一种广泛应用于数据通信和存储系统中的错误检测方法,主要用于检测数据在传输过程中是否发生了变化。CRC算法的具体实现过程如下1.将待发送
- Flutter 从入门到精通的全方位指北
老三不说话、
flutter
一、Flutter简介Flutter是由谷歌开发的一款跨平台移动应用开发框架。它使用Dart语言,通过一套代码能够同时为iOS和Android等平台构建高质量的原生应用界面。Flutter的特点众多。在性能方面,它拥有出色的渲染能力,能够实现流畅的用户体验。其UI设计灵活多样,提供丰富的自定义选项,让开发者可以轻松打造出独特且美观的界面。同时,Flutter支持热重载功能,极大地提高了开发效率,开
- Flutter 原理
AiFlutter
flutter
一、简介与用于构建移动应用程序的其他大多数框架不同,Flutter是重写了一整套包括底层渲染逻辑和上层开发语言的完整解决方案。这样不仅可以保证视图渲染在Android和iOS上的高度一致性(即高保真),在代码执行效率和渲染性能上也可以媲美原生App的体验(即高性能)。这就是Flutter和其他跨平台方案的本质区别:ReactNative之类的框架,只是通过JavaScript虚拟机扩展调用系统组件
- Flutter Android Studio打apk包
m0_68349563
Flutterflutter
一、生成应用签名复制下面的代码,在终端运行,默认会在用户文件夹下生成my_flutter.keystore文件,把my_flutter.keystore文件放到根目录>>androd>>app目录下my_flutter.keystore:要生成的签名文件(storeFile)my_flutter_alias:关键别名(keyAlias)keytool-genkey-v-keystoremy_flu
- Flutter之Column与Flex布局问题
enl0ve
FlutterDartflexwidgetflutter
Column与Flex布局的问题原本的想法是在Column布局中使用Flex布局均分高度,最开始代码是这样写的:classdemoAextendsStatelessWidget{@overrideWidgetbuild(BuilderContextcontext){returnColumn(children:[Flex(children:[Expanded(Felx:1,child:widget/
- Flutter【03】图片输出package依赖关系
有趣的杰克
flutterandroidDartios鸿蒙
环境准备安装graphvizarch-arm64brewinstallgraphviz项目根目录pubspec.yaml文件内添加dev_dependencies:yaml:^3.1.1gviz:^0.4.0执行脚本项目根目录下添加dart文件,运行main函数import'dart:io';import'dart:convert';import'package:yaml/yaml.dart'as
- Android 与 Flutter 简单对比
kuanxu
flutterandroidflutterandroidisolatethread热加载
特性AndroidFlutterUI视图View,视图更新只需要修改View的内容来更新部分内容,视图页面Activity,FragmentWidget,视图更新需要通过setState()重建整个widgetUI布局Xml来编写布局,主要布局和逻辑分开,在不同文件中Widget树来编写布局,布局逻辑不分开,在同一文件内ViewChild通过addChild,removeChild动态添加删除vi
- 一位Android程序员入坑Flutter后整理出一份超详细的学习笔记
flutter架构师
程序员面试android移动开发
实际上Flutter没有xml了,并且是通过Widgets的嵌套来实现一个布局的。如:Center是一个可以把子View放置在中央的容器;Row对应的就是LinearLayout+Horizontal,Column对应的就是LinearLayout+Vertical,他们都具备一个属性叫做crossAxisAlignment,有点类似gravity,来控制子View相对于父View的位置。Expa
- Flutter控件之 Text
眼中有码
用于显示文字Text("Text组件的使用",style:TextStyle(//文字颜色color:Color(0xfff0000),//none不显示装饰线条,underline字体下方,overline字体上方,lineThrough穿过文字decoration:TextDecoration.none,//solid直线,double双下划线,dotted虚线,dashed点下划线,wavy
- 快速写一个自己的flutter应用(新手入门)
大嘴史努比
flutter
1、搭建开发环境详细文档可以参考如下链接:跟着官方文档走就可以了。1.3搭建Flutter开发环境|《Flutter实战·第二版》(flutterchina.club)开发Android应用|Flutter中文文档-Flutter中文开发者网站-Flutter我的安装过程:首先,在VScode里面,安装Dart插件然后按住ctrlshiftP,跳出正上方的命令行,输入flutter,新建一个应用。
- BluetoothEnableFork插件的用法
talk_8
一起TalkFlutter吧android移动开发Flutter
文章目录1.概念介绍2.使用方法2.1简单用法2.2自定义用法3.示例代码4.内容总结我们在上一章回中介绍了"三方包open_settings"相关的内容,本章回中将介绍另外一个三方包:bluetooth_enable_fork.闲话休提,让我们一起TalkFlutter吧。1.概念介绍我们在本章回中主要介绍三方包bluetooth_enable_fork的用法,该包主要用来打开手机上的蓝牙开关,
- 插入表主键冲突做更新
a-john
有以下场景:
用户下了一个订单,订单内的内容较多,且来自多表,首次下单的时候,内容可能会不全(部分内容不是必须,出现有些表根本就没有没有该订单的值)。在以后更改订单时,有些内容会更改,有些内容会新增。
问题:
如果在sql语句中执行update操作,在没有数据的表中会出错。如果在逻辑代码中先做查询,查询结果有做更新,没有做插入,这样会将代码复杂化。
解决:
mysql中提供了一个sql语
- Android xml资源文件中@、@android:type、@*、?、@+含义和区别
Cb123456
@+@?@*
一.@代表引用资源
1.引用自定义资源。格式:@[package:]type/name
android:text="@string/hello"
2.引用系统资源。格式:@android:type/name
android:textColor="@android:color/opaque_red"
- 数据结构的基本介绍
天子之骄
数据结构散列表树、图线性结构价格标签
数据结构的基本介绍
数据结构就是数据的组织形式,用一种提前设计好的框架去存取数据,以便更方便,高效的对数据进行增删查改。正确选择合适的数据结构,对软件程序的高效执行的影响作用不亚于算法的设计。此外,在计算机系统中数据结构的作用也是非同小可。例如常常在编程语言中听到的栈,堆等,就是经典的数据结构。
经典的数据结构大致如下:
一:线性数据结构
(1):列表
a
- 通过二维码开放平台的API快速生成二维码
一炮送你回车库
api
现在很多网站都有通过扫二维码用手机连接的功能,联图网(http://www.liantu.com/pingtai/)的二维码开放平台开放了一个生成二维码图片的Api,挺方便使用的。闲着无聊,写了个前台快速生成二维码的方法。
html代码如下:(二维码将生成在这div下)
? 1
&nbs
- ImageIO读取一张图片改变大小
3213213333332132
javaIOimageBufferedImage
package com.demo;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* @Description 读取一张图片改变大小
* @author FuJianyon
- myeclipse集成svn(一针见血)
7454103
eclipseSVNMyEclipse
&n
- 装箱与拆箱----autoboxing和unboxing
darkranger
J2SE
4.2 自动装箱和拆箱
基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。虽然为您打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用。
4.2.1 autoboxing和unboxing
在Java中,所有要处理的东西几乎都是对象(Object)
- ajax传统的方式制作ajax
aijuans
Ajax
//这是前台的代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+
- 只用jre的eclipse是怎么编译java源文件的?
avords
javaeclipsejdktomcat
eclipse只需要jre就可以运行开发java程序了,也能自动 编译java源代码,但是jre不是java的运行环境么,难道jre中也带有编译工具? 还是eclipse自己实现的?谁能给解释一下呢问题补充:假设系统中没有安装jdk or jre,只在eclipse的目录中有一个jre,那么eclipse会采用该jre,问题是eclipse照样可以编译java源文件,为什么呢?
&nb
- 前端模块化
bee1314
模块化
背景: 前端JavaScript模块化,其实已经不是什么新鲜事了。但是很多的项目还没有真正的使用起来,还处于刀耕火种的野蛮生长阶段。 JavaScript一直缺乏有效的包管理机制,造成了大量的全局变量,大量的方法冲突。我们多么渴望有天能像Java(import),Python (import),Ruby(require)那样写代码。在没有包管理机制的年代,我们是怎么避免所
- 处理百万级以上的数据处理
bijian1013
oraclesql数据库大数据查询
一.处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 o
- mac 卸载 java 1.7 或更高版本
征客丶
javaOS
卸载 java 1.7 或更高
sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
成功执行此命令后,还可以执行 java 与 javac 命令
sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane
成功执行此命令后,还可以执行 java
- 【Spark六十一】Spark Streaming结合Flume、Kafka进行日志分析
bit1129
Stream
第一步,Flume和Kakfa对接,Flume抓取日志,写到Kafka中
第二部,Spark Streaming读取Kafka中的数据,进行实时分析
本文首先使用Kakfa自带的消息处理(脚本)来获取消息,走通Flume和Kafka的对接 1. Flume配置
1. 下载Flume和Kafka集成的插件,下载地址:https://github.com/beyondj2ee/f
- Erlang vs TNSDL
bookjovi
erlang
TNSDL是Nokia内部用于开发电信交换软件的私有语言,是在SDL语言的基础上加以修改而成,TNSDL需翻译成C语言得以编译执行,TNSDL语言中实现了异步并行的特点,当然要完整实现异步并行还需要运行时动态库的支持,异步并行类似于Erlang的process(轻量级进程),TNSDL中则称之为hand,Erlang是基于vm(beam)开发,
- 非常希望有一个预防疲劳的java软件, 预防过劳死和眼睛疲劳,大家一起努力搞一个
ljy325
企业应用
非常希望有一个预防疲劳的java软件,我看新闻和网站,国防科技大学的科学家累死了,太疲劳,老是加班,不休息,经常吃药,吃药根本就没用,根本原因是疲劳过度。我以前做java,那会公司垃圾,老想赶快学习到东西跳槽离开,搞得超负荷,不明理。深圳做软件开发经常累死人,总有不明理的人,有个软件提醒限制很好,可以挽救很多人的生命。
相关新闻:
(1)IT行业成五大疾病重灾区:过劳死平均37.9岁
- 读《研磨设计模式》-代码笔记-原型模式
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* Effective Java 建议使用copy constructor or copy factory来代替clone()方法:
* 1.public Product copy(Product p){}
* 2.publi
- 配置管理---svn工具之权限配置
chenyu19891124
SVN
今天花了大半天的功夫,终于弄懂svn权限配置。下面是今天收获的战绩。
安装完svn后就是在svn中建立版本库,比如我本地的是版本库路径是C:\Repositories\pepos。pepos是我的版本库。在pepos的目录结构
pepos
component
webapps
在conf里面的auth里赋予的权限配置为
[groups]
- 浅谈程序员的数学修养
comsci
设计模式编程算法面试招聘
浅谈程序员的数学修养
- 批量执行 bulk collect与forall用法
daizj
oraclesqlbulk collectforall
BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎。通常可以在SELECT INTO、
FETCH INTO以及RETURNING INTO子句中使用BULK COLLECT。本文将逐一描述BULK COLLECT在这几种情形下的用法。
有关FORALL语句的用法请参考:批量SQL之 F
- Linux下使用rsync最快速删除海量文件的方法
dongwei_6688
OS
1、先安装rsync:yum install rsync
2、建立一个空的文件夹:mkdir /tmp/test
3、用rsync删除目标目录:rsync --delete-before -a -H -v --progress --stats /tmp/test/ log/这样我们要删除的log目录就会被清空了,删除的速度会非常快。rsync实际上用的是替换原理,处理数十万个文件也是秒删。
- Yii CModel中rules验证规格
dcj3sjt126com
rulesyiivalidate
Yii cValidator主要用法分析:
yii验证rulesit 分类: Yii yii的rules验证 cValidator主要属性 attributes ,builtInValidators,enableClientValidation,message,on,safe,skipOnError
 
- 基于vagrant的redis主从实验
dcj3sjt126com
vagrant
平台: Mac
工具: Vagrant
系统: Centos6.5
实验目的: Redis主从
实现思路
制作一个基于sentos6.5, 已经安装好reids的box, 添加一个脚本配置从机, 然后作为后面主机从机的基础box
制作sentos6.5+redis的box
mkdir vagrant_redis
cd vagrant_
- Memcached(二)、Centos安装Memcached服务器
frank1234
centosmemcached
一、安装gcc
rpm和yum安装memcached服务器连接没有找到,所以我使用的是make的方式安装,由于make依赖于gcc,所以要先安装gcc
开始安装,命令如下,[color=red][b]顺序一定不能出错[/b][/color]:
建议可以先切换到root用户,不然可能会遇到权限问题:su root 输入密码......
rpm -ivh kernel-head
- Remove Duplicates from Sorted List
hcx2013
remove
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return&
- Spring4新特性——JSR310日期时间API的支持
jinnianshilongnian
spring4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
- 浅谈enum与单例设计模式
247687009
java单例
在JDK1.5之前的单例实现方式有两种(懒汉式和饿汉式并无设计上的区别故看做一种),两者同是私有构
造器,导出静态成员变量,以便调用者访问。
第一种
package singleton;
public class Singleton {
//导出全局成员
public final static Singleton INSTANCE = new S
- 使用switch条件语句需要注意的几点
openwrt
cbreakswitch
1. 当满足条件的case中没有break,程序将依次执行其后的每种条件(包括default)直到遇到break跳出
int main()
{
int n = 1;
switch(n) {
case 1:
printf("--1--\n");
default:
printf("defa
- 配置Spring Mybatis JUnit测试环境的应用上下文
schnell18
springmybatisJUnit
Spring-test模块中的应用上下文和web及spring boot的有很大差异。主要试下来差异有:
单元测试的app context不支持从外部properties文件注入属性
@Value注解不能解析带通配符的路径字符串
解决第一个问题可以配置一个PropertyPlaceholderConfigurer的bean。
第二个问题的具体实例是:
 
- Java 定时任务总结一
tuoni
javaspringtimerquartztimertask
Java定时任务总结 一.从技术上分类大概分为以下三种方式: 1.Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务; 说明: java.util.Timer定时器,实际上是个线程,定时执行TimerTask类 &
- 一种防止用户生成内容站点出现商业广告以及非法有害等垃圾信息的方法
yangshangchuan
rank相似度计算文本相似度词袋模型余弦相似度
本文描述了一种在ITEYE博客频道上面出现的新型的商业广告形式及其应对方法,对于其他的用户生成内容站点类型也具有同样的适用性。
最近在ITEYE博客频道上面出现了一种新型的商业广告形式,方法如下:
1、注册多个账号(一般10个以上)。
2、从多个账号中选择一个账号,发表1-2篇博文