mtk 的conferrence call建立流程
(重点看main_log与)
抓mtk log:
1、*#*#82533284#*#* 进入抓log UI
2、*#*#825364#*#* 进入工程模式
3、进入"Log and Debuging"栏 --> Telephony Log Setting -->ENABLE(然后重启生效,这样log会抓的全面,不会影藏信息,log等级会由I变成D)
A call B:
A put B on hold:
A call Conference Server:
A refer B:
流程图:
10010就是上图中的B;13267945631的号就是上图的C;18507524845就是上图的A。
注意:refer邀请成员与refer挂断成员的refer主要通过后面BYE区分,有BYE就是邀请,没有就是挂断成员。
关键AT指令:
//获取2G/3G/4G cell(包括服务和邻居 cell)信息,属性命令.//AT+ECELL=<mode>//mode:0 disable,1 enable//+ECELL:<num_of_cell>[,<Act>,<cid>,<lac_or_tac>,<mcc>,<mnc>,<sig2_in_dbm>,<ta>,<ext1>,<ext2>][,]//Act:0 GSM,2 UMTS ,7 LTE//cid:Cell Identity//mcc:mobile country code//mnc:mobile network code//lac_or_tac:GSM/UMTS ,location area code;LTE,tracking area code+ECELL: 1,7,"065F4402","25C7",460,1,448,54,29,-348,-22,0,,,,1650 //用来使能VDM ADS支持报告URC +EVADSREP<domain>,该指令被VDM执行//+EVADSREP=<mode>//+EVADSREP:<domain>//0 disable,1 enable//domain :0 cs domain,1 volte (IMS call over volte)AT+EVADSREP=1
//用来设置VDM access domain 选择模式,该指令被VDM执行//0 自动模式(both IMS and cs domian),1 cs domain only. AT+EVADSMOD=0,0 //VDM用来FDN检查和批准紧急号码,该指令被VDM执行//+EAPPROVE=<dial number>//+EAPPROVE: <is_allowed><is_emgerency><err> AT+EAPPROVE="10010" +EAPPROVE: 1,0,0 //+ECPI 属性命令,使能/禁止call处理信息//+ECPI:<call_id>,<msg_type>,<is_ibt>,<is_tch>,<dir>,<call_mode>,<number>,<type>,"<pau>"[,<disc_cause>]//+ECPI=<mode>//+ECPI? 可能响应+ECPI:<mode>//+ECPI=? 可能响应+ECPI:(0~4294967295)//mode: bit1=1 CSMCC_SETUP_MSG(MT_CALL) bit2=1 CSMCC_DISCONNECT_MSG bit3=1 CSMCC_ALERT_MSG bit4=1 CSMCC_CALL_PROCESS_MSG bit5=1 CSMCC_SYNC_MSG bit6=1 CSMCC_PROCESS_MSG bit7=1 CSMCC_CALL_CONNECTED_MSG bit8=1 CSMCC_ALL_CALLS_DISC_MSG bit9=1 CSMCC_CALL_ID_ASSIGN_MSG bit10=1 CSMCC_STATE_CHANGE_HELD bit11=1 CSMCC_STATE_CHANGE_ACTIVE bit12=1 CSMCC_STATE_CHANGE_DISCONNECTED bit13=1 CSMCC_STATE_CHANGE_MO_DISCONNECTED//msg_type:CSMCC_ALL_CALLS_DISC_MSG 0 CLCC_MT_CALL 1 CSMCC_DISCONNECT_MSG 2 CSMCC_ALERT_MSG 3 CLCC_CALL_PROCESS_MSG 4 CSMCC_SYNC_MSG 5 CSMCC_PROCESS_MSG 6 CSMCC_CALL_CONNECTED_MSG 129 CSMCC_ALL_CALLS_DISC_MSG 130 CSMCC_CALL_ID_ASSIGN_MSG 131 CSMCC_STATE_CHANGE_HELD 132 CSMCC_STATE_CHANGE_ACTIVE 133 CSMCC_STATE_CHANGE_DISCONNECTED 134 CSMCC_STATE_CHANGE_MO_DISCONNECTED 135 CSMCC_STATE_HELD_BY_REMOTE 136 CSMCC_STATE_ACTIVE_BY_REMOTE//dir : 0 CLCC_MO ,1 CLCC_MT//call_mode: 0 CLCC_VOICE_CALL 1 CLCC_DATA_CALL 3 CLCC_VFD_VOICE 4 CLCC_AVD_VOICE 5 CLCC_AVF_VOICE 6 CLCC_AFD_DATA 7 CLCC_AVD_DATA 20 IMS_VOICE_CALL 21 IMS_VIDEO_CALL 22 IMS_VOICE_CONFERENCE//type: 145 国际呼叫,129 国内呼叫 +ECPI: 1,130,0,0,0,0,"10010",129,"" // MO voice call 10010 //该URC被用来告知AP,UA从NW接收的响应码//+ESIPCPI:<call_id>,<dir>,<sip_msg_type>,<method>,<response_code>,"<reason_text>"//call_id:0~255整数//dir:0 send,1 receive//sip_msg_type:0 request,1 response//method: 1 INVITE 2 REFER 3 UPDATE 4 CANCEL 5 MESSAGE 6 ACK 7 BYE 8 OPTIONS 9 SUBSCRIBE 10 NOTITY 11 PUBLISH 12 INFO 13 PRACK//response_code:method为0时,100~600,request时为0. +ESIPCPI: 1,0,0,1,0,"" //+EIMSCI=<ims_call_status>,<is_emergency>,<ims_access_rat>ims_call_status: 0 IMS stop or SRVCC to CS call 1 IMS call ongoingis_emergency: 0 no 1 yes ims_access_rat: 0 LTE 1 WIFI 2 eHRPD AT+EIMSCI=1,0,0 // start , end 智能缓解阻塞,该指令不被用在UTRAN、GERAN 的UE //+CSCM=<application>,<start-end_indication>application: 0 MMTEL voice 1 MMTEL video 2 SMS over IPstart-end_indication: 1 start 指示 2 end 指示AT+CSCM= 0,1 //IMS call 信息,该指令被用来告知协议栈IMS call信息//+EIMSCI=<ims_call_status>,<is_emergency>,<ims_access_rat>ims_call_status: 0 IMS stop or SRVCC to CS call 1 IMS call ongoingis_emergency: 0 no 1 yes ims_access_rat: 0 LTE 1 WIFI 2 eHRPD AT+EIMSCI=1,0,0 //IMS 会议控制,该指令被IMC处理,用在PS(IMS)call domain 的call的 hold\resume。在cs call,用AT+CHLD指令。//+ECCTRL=<call_id>,<call_state>//call_state:131 hold,132 activeAT+ECCTRL=1,131+ECCTRL:0,131 //Call相关的SS(补充业务)//+CHLD=[<n>]//+CHLD=? 可能响应[+CHLD:<n>]//n: 0 释放所有的hold calls,或对于waiting call设置用户决定用户忙(UDUB) 1 释放所有的active calls并接受其他waiting or held call. 1x 释放特定的active call 2 放所有的active call在 hold并接受其他的waiting or held call. 2x 除了特定call x,放其余所有active call在hold 3 add a held call 到会议电话中 4 连接2个calls并断开这两个calls subscriber. 5 主动完成对占线用户的呼叫请求(CCBS)AT+CHLD=3 //该URC由IMC发送,被用来告知AP call改变源于哪里//+EIMSCMODE:<call_id>,<call_mode>,<camera_direction>,<audio_direction>,"<p_assert_url>",<audio_codec>//call_mode: 20 IMS_VOICE_CALL 21 IMS_VIDEO_CALL 22 IMS_VOICE_CONFERENCE 23 IMS_VIDEO_CONFERENCE 24 IMS_VOICE_CONFERENCE_PARTICIPANT 25 IMS_VIDEO_CONFERENCE_PARTICIPANT//camera_direction\audio_direction: 0 inactive 1 sendonly 2 recvonly 3 sendrecv//audio_codec: 1 AMR 2 AMR-WB 3 H264 16 H265 17 EVS+EIMSCMODE: 3,22,0,3,"",2 //+CEER 错误报告+CEER:<cause>,<report>+CEER: 16,CM_NORMAL_CALL_CLR //(1)For network attachment:+CGEV:NW DETACH,网络已强制PS分离,这意味着所有活动上下文已停用,这些没有单独报告。+CGEV:ME DETACH,移动终端已强制PS分离,这意味着所有活动上下文已停用,这些没有单独报告。//(2)For PDP context activation+CGEV:NW PDN ACT <cid>,其中<cid>参考+CGDCONT,这事件不被用于EPS,PDP context是在GSM/UMTS.+CGEV:ME PDN ACT <cid>[,<reason>],PDN 连接在LTE,PDP context是在GSM/UMTS.reason:网络为指定的PDP类型为IPV4或IPV6。 0 IPV4 only allowed 1 IPV6 only allowed 2 single address bearers only allowed. 3 single address bearers only allowed and MT initated 第二地址类型承载器的模拟上下文未成功。.+CGEV:ME ACT <p_cid>,<cid>,<event_type> +CGEV:NW ACT <p_cid>,<cid>,<event_type> event_type: 0 information event_type 1 information request:acknowledgement required,acknowledgement 能够被接受或拒绝,see +CGANS.+CGEV:ME PDN DEACT <cid>+CGEV:NW PDN DEACT <cid>+CGEV:NW DEACT <p_cid>,<cid>,<event_type>+CGEV:ME DEACT <p_cid>,<cid>,<event_type>//(3)For PDP context modification,+CGEV:NW MODIFY <cid>,<change_reason>,<event_type>+CGEV:ME MODIFY <cid>,<change_reason>,<event_type>change_reason: 1 TFT only changed 2 Qos only changed 3 both TTF and Qos changed //(4)For other PDP context handling+CGEV:REJECT<PDP_type>,<PDP_addr>,参数see+CGDCONT,当MT无法报告上下文激活时,发生了一个网络请求向TE发出+CRING URC并被自动拒绝。+CGEV:NW REJECT<PDP_type>,<PDP_addr>[,<cid>]+CGEV: NW MODIFY 10, 0, 0 //该URC由IMC发送,被用来告知IMS会议电话的subscription状态,URC(unsolicited result code)//+ESUBCTRL:<call_id>,<event>,<result>,<cause>//event:0 unknown, 1 conference//result:0 成功,1 失败//cause:参考+ECONF URC+ESUBCTRL: 3,1,0,0 //IMS会议操作,该命令被IMC执行//add or remove 会议成员//+ECONF=<conf_call_id><operation><num>[,<joined_call_id>]//operation:0 add,1 removeAT+ECONF=3,1,"13267945631" //该URC由IMC发送,被用来响应IMS会议电话控制指令AT+ECONF//+ECONF:<conf_call_id>,<operation>,<num>,<result>,<cause>[,<joined_call_id>]//operation:0 add ,1 remove//result:0 success ,1 failure//cause: NORMAL=0, ABNORMAL, NONNUMBER, UNREGISTERED, DISCONNECT, BECANCEL, BEREJECT, BEREJECT_380, BEREJECT_380_EMERGENCY_TO_CS, BEREJECT_380_EMERGENCY_TO_REREG, BEREJECT_480, BEREJECT_503, TX_TIMEOUT, NO_PRIVACY, PRECONDFAIL, SECONDCALL, NOMEDIACONTENT, INVALIDMSG, INVALIDCMD, INVALIDIDX, SRVCC, FACILITY_REJECTED, DEDICATED_BEARER_TIMEOUT, UA_MAX, UNAVAILABLE_OF_CALLS, IMS_CC_CAUSE_MAX+ECONF: 3,0,"",0,0,2
常见log分析:
1、在mobilelog(主要是main_log、radio_log、sys_log)中查找“AT+CHLD”,有:
- :: I AT : [] AT> AT+CHLD= (RIL_CMD_RT_7 tid:) //add a held call 到会议电话中 - :: I AT : [] AT> AT+CHLD= (RIL_CMD_RT_7 tid:) //释放特定的active call
2、在mobilelog(主要是main_log、radio_log、sys_log)中查找“ImsConference”,有:
main_log: Line : - :: I MtkImsCall: callSessionConferenceStateUpdated :: state=[ImsConferenceState < ***:user-entity=tel:+, status=connected, user=***, display-text=+, endpoint=***, ***: user-entity=tel:, status=connected, user=***, display-text=, endpoint=***, ***: user-entity=tel:+, onHold:N mute:N mCallProfile:{ serviceType=, callType=, restrictCause=, mediaProfile={ audioQuality=, audioDirection=, videoQuality=, videoDirection=, rttMode=, hasRttAudioSpeech=, emergencyUrns=[], emergencyCallRouting=, emergencyCallTesting= state:ESTABLISHED callId:] transientSession:null]//////可以看到一个成员断开连接(+8613267945631) Line : - :: I MtkImsCall: callSessionConferenceStateUpdated :: state=[ImsConferenceState < ***: user-entity=tel:+, status=connected, user=***, display-text=+, endpoint=***, ***: user-entity=tel:, status=connected, user=***, display-text=, endpoint=***, ***: user-entity=tel:+, onHold:N mute:N mCallProfile:{ serviceType=, callType=, restrictCause=, mediaProfile={ audioQuality=, audioDirection=, videoQuality=, videoDirection=, rttMode=, hasRttAudioSpeech=, emergencyUrns=[], emergencyCallRouting=, emergencyCallTesting= state:ESTABLISHED callId:] transientSession:null]
sys_log: I Telephony: ImsConference: handleConferenceParticipantsUpdate: size=3 I Telephony: ImsConference: handleConferenceParticipantsUpdate: size=2 //成员只有2个(包括host) I Telephony: ImsConference: startEmulatingSinglePartyCall: conference has a single participant; downgrade to single party call.
radio_log: D RfxRoot : processMessage() msg = [type=REQUEST, source=GSM, dest=GSM,...D RtcImsConference: firstMerge, callId_1: +86*****945631, callId_2: +86*****945631, num_1: +86*****945631, num_2: +86*****945631D RtcCC : [0] generateImsConference() slot: 0D RfxRoot : processMessage() msg = [type=RESPONSE, source=GSM, dest=GSM,...D RtcImsConference: modifyParticipantCompleteD RtcImsConference: modifyParticipantComplete: mLocalParticipants:752*****752D RtcImsConference: modifyParticipantComplete: mLocalParticipants:+86*****945631D RfxRoot : processMessage() msg = [type=URC, source=GSM, dest=GSM,...D RtcImsConference: handleVolteConfCallMessageD RtcImsConference: startElement Conference uri: xmlns //---会议信息描述D RtcImsConference: :startElement mCEPState: 1D RtcImsConference: :startElement version: 0D RtcImsConference: startElement MaxUserCount: 0D RtcImsConference: startElement MaxUserCount: 6D RtcImsConference: startElement user - entity: tel*****8507524845D RtcImsConference: startElement display-text: **D RtcImsConference: startElement display-text: +86*****524845D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 1D RtcImsConference: startElement user - entity: tel***010D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 2D RtcImsConference: startElement user - entity: tel*****3267945631D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 3 //和上面描述类似D RtcImsConference: cepState: 1D RtcImsConference: setupHostD RtcImsConference: getUserNameFromSipTelUriString uriString: **D RtcImsConference: setupHost: mHostAddr: **D RtcImsConference: fullUpdateParticipantsD RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****8507524845 //HostD RtcImsConference: getUserNameFromSipTelUriString uriString: tel***010D RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****3267945631D RtcImsConference: isPartialCEP: 0D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: notifyConfStateUpdate()D RtcImsConference: isEmptyConferenceD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isEmptyConference, userCount: 2 (会议成员,不包括host)D RtcImsConference: isEmptyConference, set mHaveUpdatedConferenceWithMember = trueD RILC : imsConferenceInfoIndicationD RtcImsConference: updateConferenceStateWithLocalCacheD RILC : controlImsConferenceCallMember: serial 587, controlType 0D RfxRoot : processMessage() msg = [type=REQUEST, source=GSM, dest=GSM, p...D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****945631D RfxRoot : processMessage() msg = [type=RESPONSE, source=GSM, dest=GSM,..D RtcImsConference: modifyParticipantCompleteD RtcImsConference: modifyParticipantComplete: mLocalParticipants:752*****752D RtcImsConference: modifyParticipantComplete: mLocalParticipants:+86*****945631D RfxRoot : processMessage() msg = [type=URC, source=GSM, dest=GSM,..D RtcImsConference: startElement Conference uri: xmlnsD RtcImsConference: :startElement mCEPState: 1D RtcImsConference: :startElement version: 1D RtcImsConference: startElement MaxUserCount: 0D RtcImsConference: startElement MaxUserCount: 6D RtcImsConference: startElement user - entity: tel*****8507524845D RtcImsConference: startElement display-text: **D RtcImsConference: startElement display-text: +86*****524845D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 1D RtcImsConference: startElement user - entity: tel***010D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 2D RtcImsConference: startElement user - entity: tel*****3267945631D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: disconnectedD RtcImsConference: endElement end user mUsers.size: 3D RtcImsConference: cepState: 1D RtcImsConference: setupHostD RtcImsConference: getUserNameFromSipTelUriString uriString: **D RtcImsConference: setupHost: mHostAddr: **D RtcImsConference: fullUpdateParticipantsD RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****8507524845D RtcImsConference: getUserNameFromSipTelUriString uriString: tel***010D RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****3267945631D RtcImsConference: isPartialCEP: 0D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: updateLocalCache: remove +86*****945631D RtcImsConference: notifyConfStateUpdate()D RtcImsConference: isEmptyConferenceD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isEmptyConference, userCount: 1D RILC : imsConferenceInfoIndicationD RtcImsConference: updateConferenceStateWithLocalCacheD RtcImsConference: closeConference()D RfxRoot : processMessage() msg = [type=URC, source=GSM, dest=GSM...D RtcImsConference: handleVolteConfCallMessage
3、在mobilelog(主要是main_log、radio_log、sys_log)中查找“Telecom : | Telephony:”,有:
D Telecom : Logging: START_SESSION I Telecom : Event: RecordEntry ...: REQUEST_DISCONNECT,I Telecom : Call: Send disconnect to connection service for call: [Capabilities: CAPABILITY_HOLD CAPABILITY_SUPPORT_HOLD CAPABILITY_MUTE], [Properties: PROPERTY_HIGH_DEF_AUDIO PROPERTY_IMS]]D Telecom : ConnectionServiceWrapper: Telecom -> ConnectionService TelephonyConnectionService]: disconnect D Telecom : Logging: END_SESSIOND Telecom : Adapter: disconnect call DisconnectCause [ Code: (LOCAL) Label: () Description: () Reason: (LOCAL) I Telecom : CallsManager: setCallState ACTIVE -> DISCONNECTED, call:...I Telecom : InCallController: Sending updateCallD Telecom : ConnectionServiceFocusManager: handleCallStateChanged I Telecom : PhoneStateBroadcaster: Broadcasted state change: 0I Telecom : IncomingCallNotifier: updateIncomingCallI Telecom : InCallController: onCallAdded:I Telecom : CallsManager: Creating a new outgoing call with handle: tel:***10
4.修改log等级(V>D>I)
adb shell setprop log.tag.Telecom V adb shell setprop log.tag.Telephony V adb shell setprop log.tag.TelecomFramework V adb shell setprop persist.log.tag.RtcCC V adb shell setprop persist.log.tag.RtcImsConference V
常见问题FAQ:
Q1: UE在建立conference call失败。Log中看UE 去refer其他成员时,无响应。
A1: 可以查看REFER中的Call-ID和之前的INVITE的是否一样。如果不一样,可以和网络侧确认他们需要的是in-dialog还是out-dialog的REFER请求。并修改工模中的refer_dialog_to_server值。0表示out-dialog,1表示in-dialog。
Q2: UE显示的成员号码不对
A2: 常见的是网络给的不对。可以在会议建立成功后,网络给的成员信息NOTIFY中的XML查看,网络给的号码是否正确?
mtk 的conferrence call建立流程的更多相关文章
- java项目建立流程
spring mvc 书籍Spring in Action, 4th Edition java项目建立流程 1 使用maven来管理项目中的库.先用marven建立一个框架mvn archetype: ...
- TCP建立流程 【转】
解决TCP连接数过多的问题 TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题 TCP状态迁移 大家对netstat -a命令很熟悉,但是,你有没有注意到STATE一栏呢,基 ...
- SIP中第三方呼叫控制(3PCC)建立流程
1.引言 在传统的电话网环境中,第三方呼叫控制允许一个实体(这里称为控制器- controller) 建立并管理另外的两方或多方之间的通信关系,而其本身并不参与通信. 第三方呼叫控制经常用于运营商业务 ...
- mtk lcm驱动加载流程 (转载)
平台:mt6582 + Android 4.4 前面就说过,在mtk代码中支持屏是可兼容的,通过调用驱动中的compare_id函数来匹配驱动和屏,这里来细看一下代码. 1. LK部分(mediate ...
- Git代码仓库的建立流程
Git作为现在比较流行的版本管理工具,其配置非常简单.方便. 下面举一个简单例子,说明如何在服务器上建立一个公共的git代码仓库. 1.确保服务器上已经打开ssh服务,可以用ps -e | grep ...
- mtk lk阶段的lcm流程
一.lk进入kmain() 1. vendor/mediatek/proprietary/bootable/bootloader/lk/arch/arm/srt0.S bl kmain 二.初始化lk ...
- BPM端到端流程解决方案分享
一.需求分析 1.企业规模的不断发展.管理水平的不断提升,通常伴随着企业各业务板块管理分工更细.更专业,IT系统同样越来越多.越来越专 业化.不可避免的,部门墙和信息孤岛出现了,企业的流程被部门或者I ...
- 深入浅出 Redis client/server交互流程
综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...
- 制造行业流程管理的“IPO”思维
流程管理是企业从流程角度出发,关注流程是否增值的一套管理体系.从认识流程.到建立流程.到管理流程.再到优化流程,企业管理人员要去除不增值和低价值的流程,减少员工犯错误的机会,建立一套卓越的流程体系. ...
随机推荐
- 精选15个国外CSS框架
转自:http://blog.bingo929.com/css-frameworks-15.html 什么是css框架 实际上还是让我们从框架说起吧.框架就是一个你可以用于你的网站项目的基本的概念上的 ...
- Activiti学习笔记9 — UserTask共有任务的使用
1.创建流程引擎对象 private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); 2.发布一个流程 ...
- kerberos协议介绍
一.kerberos认证过程: client向kerberos服务请求,希望获取访问server的权限.kerberos得到了这个消息,首先得判断client是否是可信赖的,也就是白名单黑名单的说法. ...
- launch-s.sh 发布脚本备份
[root@izm5ef2ow9zssfxi6opoucz code]# cat launch-s.sh serverId=1313 zipName=$1 serverPath='code-s'$se ...
- Java创建List、Map等集合对象的同时进行赋值操作
title: Java创建List.Map等集合对象的同时进行赋值操作 date: 2019-11-28 23:25:47 tags: JavaSE categories: JavaSE 问题简介 ...
- LR调试脚本的时候报错Error -27796:(已解决)
LR调试bbs脚本的时候报错: 1.Error -27796: Failed to connect to server "192.168.211.128:80": [10060] ...
- 手写代码注意点 -- HashMap
1.定义 HashMap<String,String> hashMap = new HashMap<>(); <String,String>只需要写一遍 2.获取k ...
- thinkphp 模板布局
ThinkPHP的模板引擎内置了布局模板功能支持,可以方便的实现模板布局以及布局嵌套功能. 有三种布局模板的支持方式: 第一种方式:全局配置方式 这种方式仅需在项目配置文件中添加相关的布局模板配置,就 ...
- luoguP2398 GCD SUM [gcd]
题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式: n 输出格式: sum ...
- NOI2016
luoguP1712 [NOI2016]区间 这是一道送分题. 对于我这种每天抄题解不动脑子思维僵化得厉害的智障选手就是送命题. 一直在想端点排序各种Treap搞... 正解: 已知一些区间,如何判断 ...