android studio android:text="@string/button_send"

android studio新建button这句话不懂:android:text="@string/button_send"

请教个问题:android studio里面新建button里面有一句:android:text="@string/button_send"。在string.xml里面有一句:Send

能不能这样理解:button_send就是一个变量,先在button中定义这个变量,然后在string.xml中对其赋值,=send

5个回答

android:text="@string/button_send" 可以直接改成 android:text="发送"
这样就看明白了

先在string.xml中定义变量,然后在xml布局中引用这个变量。

其实你这样理解没有错,在button里面定义一下,然后在String.xml里面进行赋值。不过这样理解真的很别扭,一般都是先定义变量但是可以不用,如果按你这种说法就是错误的,你在button里面用到了然后string.xml里面就必须写,而string.xml里面写的但是你button里面却不必用到,所以你还是楼上那种理解好点

以上的回答都好,谢谢大家,结贴!

  • button_send是一个方法
  • android:text="@string/button_send" 这个按钮在布局中的显示引用string中的值
  • Send 在布局里button显示的字符串为Send
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android studio发送短信程序添加权限依然报错
MainActivity: public class MainActivity extends AppCompatActivity { private EditText messageeditText; private EditText numbereditText; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); numbereditText= (EditText) findViewById(R.id.numbereditText); messageeditText= (EditText) findViewById(R.id.messageeditetext); button= (Button) findViewById(R.id.button); final PendingIntent pendingIntent=PendingIntent.getBroadcast(this,0,new Intent(),0); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SmsManager smsManager=SmsManager.getDefault(); smsManager.sendTextMessage(numbereditText.getText().toString(),null, messageeditText.getText().toString(),null,null); } }); } } 配置文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.study.sendreceivemessage"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> </manifest> logcat: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.study.sendreceivemessage, PID: 4115 java.lang.SecurityException: Sending SMS message: uid 10058 does not have android.permission.SEND_SMS. at android.os.Parcel.readException(Parcel.java:1599) at android.os.Parcel.readException(Parcel.java:1552) at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:768) at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:310) at android.telephony.SmsManager.sendTextMessage(SmsManager.java:293) at com.example.study.sendreceivemessage.MainActivity$1.onClick(MainActivity.java:29) at android.view.View.performClick(View.java:5198) at android.view.View$PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
vs2010里,无法解析的外部符号 protected: void __thiscall
按论坛的教程编程串口,错误提示: yyyzzzDlg.obj : error LNK2001: 无法解析的外部符号 "protected: void __thiscall CyyyzzzDlg::OnStnClickedStatic4(void)" (?OnStnClickedStatic4@CyyyzzzDlg@@IAEXXZ) c:\users\yz980\documents\visual studio 2010\Projects\yyyzzz\Debug\yyyzzz.exe : fatal error LNK1120: 1 个无法解析的外部命令 程序: // yyyzzzDlg.cpp : 实现文件 // #include "stdafx.h" #include "yyyzzz.h" #include "yyyzzzDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CyyyzzzDlg 对话框 CyyyzzzDlg::CyyyzzzDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CyyyzzzDlg::IDD, pParent) , m_EditReceive(_T("")) , m_EditSend(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CyyyzzzDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_EditReceive); DDX_Text(pDX, IDC_EDIT2, m_EditSend); DDX_Control(pDX, IDC_COMBO1, m_comb1); DDX_Control(pDX, IDC_COMBO2, m_cob2); DDX_Control(pDX, IDC_MSCOMM1, m_mscom); } BEGIN_MESSAGE_MAP(CyyyzzzDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_OPEN, &CyyyzzzDlg::OnBnClickedButtonOpen) ON_BN_CLICKED(IDC_BUTTON_SEND, &CyyyzzzDlg::OnBnClickedButtonSend) ON_BN_CLICKED(IDC_BUTTON_CLEAR, &CyyyzzzDlg::OnBnClickedButtonClear) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CyyyzzzDlg::OnBnClickedButtonClose) ON_STN_CLICKED(IDC_STATIC4, &CyyyzzzDlg::OnStnClickedStatic4) END_MESSAGE_MAP() // CyyyzzzDlg 消息处理程序 BOOL CyyyzzzDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 串口选择组合框 CString str; int i; for(i = 0; i < 15; i++) { str.Format(_T("COM %d"), i+1); m_comb1.InsertString(i, str); //将COM 1-15填入comb1 } m_comb1.SetCurSel(0); //预置为COM 1 //波特率选择组合框 CString str1[]={_T("300"),_T("600"),_T("1200"),_T("2400"),_T("4800"),_T("9600"), _T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200")}; for(i = 0; i < 12; i++) { int judge_tf = m_cob2.AddString(str1[i]); if((judge_tf == CB_ERR) || (judge_tf == CB_ERRSPACE)) MessageBox(_T("Build baud error!")); } m_cob2.SetCurSel(5); //预置波特率为9600 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CyyyzzzDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CyyyzzzDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CyyyzzzDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CyyyzzzDlg::OnBnClickedButtonOpen() { CString str, str1, n; GetDlgItemText(IDC_BUTTON_OPEN, str); //str获得与对话框中的控件相关的标题或文本 CWnd *h1; //窗口类的基类 h1 = GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption //串口为关闭状态 if(!m_mscom.get_PortOpen()) { m_cob2.GetLBText(m_cob2.GetCurSel(), str1); //取得所选的字符串,并存放在str1里面 str1 = str1+','+'n'+','+'8'+','+'1'; m_mscom.put_CommPort(m_comb1.GetCurSel()+1); //选择串口 m_mscom.put_InputMode(1); //设置输入方式为二进制方式 m_mscom.put_Settings(str1); //comb2选择的波特率,无校验,8数据位,1个停止位 m_mscom.put_InputLen(1024); //设置当前接收区数据长度为1024 m_mscom.put_RThreshold(1); //缓冲区一个字符引发事件 m_mscom.put_RTSEnable(1); //设置RT允许 m_mscom.put_PortOpen(true); //打开串口 //打开成功 if(m_mscom.get_PortOpen()) { str = _T("关闭串口"); UpdateData(true); //把控件中的值和变量进行交换 h1->SetWindowText(str); //改变按钮名称为‘’关闭串口”,提供关闭操作 } } //串口为打开状态 else { m_mscom.put_PortOpen(false); //关闭串口 //关闭成功 if(str != _T("打开串口")) { str = _T("打开串口"); UpdateData(true); h1->SetWindowText(str); //更新数据后,提供打开操作 } } } void CyyyzzzDlg::OnBnClickedButtonSend() { UpdateData(true); //更新控件数据 m_mscom.put_Output(COleVariant(m_EditSend));//把发送编辑框的数据发送出去 } void CyyyzzzDlg::OnBnClickedButtonClear() { m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //根据数据状态反馈给控件 } void CyyyzzzDlg::OnBnClickedButtonClose() { //若当前串口为打开 if(m_mscom.get_PortOpen()) m_mscom.put_PortOpen(false); //置为关闭 CDialogEx::OnCancel(); } BEGIN_EVENTSINK_MAP(CyyyzzzDlg, CDialogEx) ON_EVENT(CyyyzzzDlg, IDC_MSCOMM1, 1, CyyyzzzDlg::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() void CyyyzzzDlg::OnCommMscomm1() { //接收缓冲区有数据 if(m_mscom.get_CommEvent() == 2) { char str[1024] = {0}; //缓冲区最大为1024 long k; VARIANT InputData = m_mscom.get_Input(); //读入缓冲区 COleSafeArray fs; fs = InputData; //VARIANT型变À量转换为COleSafeArray型变量 for(k = 0; (size_t)k < fs.GetOneDimSize(); k++) { fs.GetElement(&k, str+k); //转换为BYTE型数组 } m_EditReceive += str; //接收到编辑框里面 //SetTimer(1, 10, NULL); //延时10ms UpdateData(false); //将数据在屏幕中对应控件中显示出来。 } }
asp.net用短信模块通过串口给手机发送短信
[STAThread] [DllImport("sms.dll", EntryPoint = "Sms_Connection")] public static extern uint Sms_Connection(string CopyRight, uint Com_Port, uint Com_BaudRate, out string Mobile_Type, out string CopyRightToCOM); [DllImport("sms.dll", EntryPoint = "Sms_Disconnection")] public static extern uint Sms_Disconnection(); [DllImport("sms.dll", EntryPoint = "Sms_Send")] public static extern uint Sms_Send(string Sms_TelNum, string Sms_Text); [DllImport("sms.dll", EntryPoint = "Sms_Receive")] public static extern uint Sms_Receive(string Sms_Type, out string Sms_Text); [DllImport("sms.dll", EntryPoint = "Sms_Delete")] public static extern uint Sms_Delete(string Sms_Index); [DllImport("sms.dll", EntryPoint = "Sms_AutoFlag")] public static extern uint Sms_AutoFlag(); [DllImport("sms.dll", EntryPoint = "Sms_NewFlag")] public static extern uint Sms_NewFlag(); protected void Page_Load(object sender, EventArgs e) { protConnection(); } public void protConnection() { String TypeStr=""; string CopyRightToCOM=""; String CopyRightStr = "//上海迅赛信息技术有限公司,网址www.xunsai.com//"; bool connect = Sms_Connection(CopyRightStr, uint.Parse("3"), 9600, out TypeStr, out CopyRightToCOM) == 1; if (connect) { Log("串口COM3连接成功"); } else { Log("串口COM3连接失败"); } } protected void Button1_Click(object sender, EventArgs e) { string phone = this.tx2.Text; //发送短信的目标号码 string message = this.tx1.Text; //短信内容 Sms_Send(phone, message); } 页面中就一个号码框和一个短信内容文本框,一个发送按钮,sms.dll文件以经放在了system32目录下,启动程序提示:无法加载 DLL“sms.dll”: 找不到指定的模块。 然后又将sms.dll文件放在了项目bin目录下,以及release和debug目录下,程序干脆就启动不起来了,请大神指点。
C# webbrowser键盘模拟输入 Inputpile路径。这个Inputpile是没有输入框的,TAB键不管用,能有什么办法可以填入路径?
有一个页面,页面上嵌套了一个form代码如下 ``` /*前面代码省略*/ <div> <form action="https://supplier.netsea.jp/csv_exhibit/confirm" method="POST" enctype="multipart/form-data"> <input type="hidden" name="_token" value="xswwuhHYlYTE0do4M6aSjKdrxP0NEDMk9hUGZaxa"> <p class="tC"> <label for="uploadCsvFile" class="fileInputLabel"><input type="file" name="csv_file" id="uploadCsvFile">选择文件</label><span class="inputFileName block topMgnSeth">你还没有选者文件</span> </p> <div class="w30per blockC topMgnSet4 btmMgnSet6"> <button class="btnType01 btnColor02 btnEffects" type="submit">上传</button> </div> </form> </div> //cs代码 void up_file(object sender, WebBrowserDocumentCompletedEventArgs e)//模拟登陆后操作文件上传 { HtmlElement hel = webBrowser1.Document.GetElementById("uploadCsvFile"); hel.Focus(); hel.InvokeMember("click");//这里可以捕获焦点,弹出选择文件框 //到这里的时候输入框的光标已经在指定位置,输入路径的地方。于是执行下面的操作 string file = "C:\\Users\\Administrator\\Desktop\\1.csv"; //SendKeys.SendWait("{TAB}");这里找不到“uploadCsvFile”,不用Webbrowser直接在IE浏览器里按TAB键也找不到焦点,这个方法排除。 //SendKeys.Send(file);这个方法也是在弹出的对话框里无法填写路径 } //在网上找了下面的方法,因为TAB键找不到焦点也不行,这个文件传上去还要点击确认按钮才能上传成功,大家帮帮忙想想办法 void up_file(object sender, WebBrowserDocumentCompletedEventArgs e) { HtmlElement hel = webBrowser1.Document.GetElementById("uploadCsvFile"); hel.Focus(); SendKeys.SendWait("{TAB}"); SendKeys.SendWait(" "); DelayFillFileChooseDialog(file); } void DelayFillFileChooseDialog(string file) { BackgroundWorker b = new BackgroundWorker(); b.RunWorkerCompleted += new RunWorkerCompletedEventHandler(b_RunWorkerCompleted); b.DoWork += new DoWorkEventHandler(b_DoWork); b.RunWorkerAsync(file); } void b_DoWork(object sender, DoWorkEventArgs e) { Thread.Sleep(1000); e.Result = e.Argument; } void b_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { SendKeys.Send(e.Result as string); SendKeys.Send("{Enter}"); } ```
ANDROID STUDIO网络问题
报错为: 01/09 11:01:50: Launching app $ adb push C:\Users\Administrator\AndroidStudioProjects\MyApplication13\app\build\outputs\apk\app-debug.apk /data/local/tmp/com.example.administrator.myapplication $ adb shell pm install -r "/data/local/tmp/com.example.administrator.myapplication" Success $ adb shell am start -n "com.example.administrator.myapplication/com.example.administrator.myapplication.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Client not ready yet..Connected to process 2346 on device emulator-5554 W/System: ClassLoader referenced unknown path: /data/app/com.example.administrator.myapplication-1/lib/x86 I/InstantRun: Instant Run Runtime started. Android package is com.example.administrator.myapplication, real application class is null. W/System: ClassLoader referenced unknown path: /data/app/com.example.administrator.myapplication-1/lib/x86 W/art: Verification of void android.support.v7.app.AppCompatActivity.onSupportActionModeFinished(android.support.v7.view.ActionMode) took 1.372s W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable W/gralloc_ranchu: Gralloc pipe failed [ 01-09 03:02:02.837 2346: 2346 D/ ] HostConnection::get() New Host Connection established 0x9daf8380, tid 2346 I/OpenGLRenderer: Initialized EGL, version 1.4 D/OpenGLRenderer: Swap behavior 1 D/NetworkSecurityConfig: No Network Security Config specified, using platform default Application terminated. 在权限中,我已经添加了网络权限。 但是不知道为什么就是不行。 源代码如下: package com.example.administrator.myapplication; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import static android.icu.lang.UCharacter.GraphemeClusterBreak.V; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ TextView responseText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button sendRquest=(Button)findViewById(R.id.send_request); responseText=(TextView)findViewById(R.id.requestion_text); sendRquest.setOnClickListener(this); } public void onClick(View v) { if(v.getId()==R.id.send_request) { sendResquestWithHttpURLConnection(); } } private void sendResquestWithHttpURLConnection() { new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection=null; BufferedReader reader=null; try{ URL url=new URL("http://www.baidu.com"); connection=(HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); InputStream in=connection.getInputStream(); reader=new BufferedReader(new InputStreamReader(in)); StringBuilder response=new StringBuilder(); String line; while((line=reader.readLine())!=null) { response.append(in); } showResponse(response.toString()); } catch(Exception e) { e.printStackTrace(); } finally { if(reader!=null){ try{ reader.close(); }catch (IOException e) { e.printStackTrace(); } } if(connection!=null) { connection.disconnect(); } } } }).start(); } private void showResponse(final String response){ runOnUiThread(new Runnable(){ public void run(){ responseText.setText(response); } }); } }
AndroidStudio 用OkHttp访问云端JSON时,模拟机成功,真机失败
源代码如下: public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private TextView responseText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button sendRequest=(Button)findViewById(R.id.send_request); responseText=(TextView)findViewById(R.id.response_text); sendRequest.setOnClickListener(this); } @Override public void onClick(View v){ if(v.getId()==R.id.send_request){ sendRequestWithOkHttp(); } } private void sendRequestWithOkHttp(){ new Thread(new Runnable() { @Override public void run() { try{ OkHttpClient client=new OkHttpClient(); Request request=new Request.Builder().url("http://guolin.tech/api/china").build(); Response response=client.newCall(request).execute(); String responseData=response.body().string(); showResponse(responseData); }catch (Exception e){ e.printStackTrace(); } } }).start(); } private void showResponse(final String response){ runOnUiThread(new Runnable() { @Override public void run() { responseText.setText(response); } }); } } 模拟机的图片如下: ![模拟机的图片](https://img-ask.csdn.net/upload/201908/07/1565179541_891079.png) 真机调试的时候,按按钮没反应,不会显示文字。 最近装了新版本的Android Studio 不知道有没有影响
AS上写了一个聊天室客户端报错java.lang.String java.io.BufferedReader.readLine()
![图片说明](https://img-ask.csdn.net/upload/201909/04/1567529308_276159.png) 求大神看一下 在网上也没有搜到报这个readLine错误的 是一个聊天室的客户端MainAcitivity的代码如下 ``` package com.example.mysocketclient; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import org.w3c.dom.Text; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; public class MainActivity extends AppCompatActivity { EditText editTextIp; EditText editTextContent; TextView textViewContent; Button btnConnect; Button btnSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTextIp = findViewById(R.id.editTextIp); editTextContent = findViewById(R.id.editTextContent); textViewContent = findViewById(R.id.textViewContent); btnConnect =findViewById(R.id.btnConnect); btnSend = findViewById(R.id.btnSend); btnConnect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { connect(); } }); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { send(); } }); } //----------------------------------- Socket socket = null; BufferedWriter writer = null; BufferedReader reader = null; public void connect() { AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>() { @SuppressLint("WrongThread") @Override protected Void doInBackground(Void... voids) { try { socket = new Socket(editTextIp.getText().toString(),12345); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); publishProgress("@success"); } catch (UnknownHostException e1) { //Toast.makeText(MainActivity.this, "无法建立链接", Toast.LENGTH_SHORT).show(); e1.printStackTrace(); } catch (IOException e1) { //Toast.makeText(MainActivity.this, "无法建立链接", Toast.LENGTH_SHORT).show(); e1.printStackTrace(); } try { String line; while ( (line = reader.readLine()) != null ) { publishProgress(line); } } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onProgressUpdate (String...values){ if (values[0].equals("@success")) { Toast.makeText(MainActivity.this, "成功建立链接", Toast.LENGTH_SHORT).show(); } textViewContent.append("别人说: "+values[0]+"\n"); super.onProgressUpdate(values); } }; read.execute(); } public void send () { try { textViewContent.append("我说: "+editTextContent.getText().toString()+"\n"); writer.write(editTextContent.getText().toString()+"\n"); writer.flush(); editTextContent.setText(""); } catch (IOException e) { e.printStackTrace(); } } } ```
安卓聊天室客户端发送消息 为什么在服务器没有接收到?
写了一个聊天室服务器 打开两个终端并连接上服务器之后 可以实现相互传递消息 写了一个安卓聊天室客户端 成功连接上服务器之后发送消息 并没有传送到终端 应该是没有传送到服务器成功 但是可以接收来自终端的消息 效果如图 ![图片说明](https://img-ask.csdn.net/upload/201909/05/1567663068_691729.png) MainActivity代码如下 package com.example.mysocketclient; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import org.w3c.dom.Text; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class MainActivity extends AppCompatActivity { EditText editTextIp; EditText editTextContent; TextView textViewContent; Button btnConnect; Button btnSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTextIp = (EditText) findViewById(R.id.editTextIp); editTextContent = (EditText) findViewById(R.id.editTextContent); textViewContent = (TextView) findViewById(R.id.textViewContent); btnConnect =(Button) findViewById(R.id.btnConnect); btnSend = (Button) findViewById(R.id.btnSend); btnConnect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { connect(); } }); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { send(); } }); } //----------------------------------- Socket socket = null; BufferedWriter writer = null; BufferedReader reader = null; public void connect() { AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>() { @SuppressLint("WrongThread") @Override protected Void doInBackground(Void... voids) { try { socket = new Socket(editTextIp.getText().toString(),12345); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); publishProgress("@success"); String line; while ( (line = reader.readLine()) != null ) { publishProgress(line); } } catch (UnknownHostException e) { //Toast.makeText(MainActivity.this, "无法建立链接", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } catch (IOException e) { //Toast.makeText(MainActivity.this, "无法建立链接", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } // try { // String line; // while ( (line = reader.readLine()) != null ) { // publishProgress(line); // } // } catch (IOException e) { // e.printStackTrace(); // } return null; } @Override protected void onProgressUpdate (String...values){ if (values[0].equals("@success")) { Toast.makeText(MainActivity.this, "成功建立链接", Toast.LENGTH_SHORT).show(); } textViewContent.append("别人说: "+values[0]+"\n"); super.onProgressUpdate(values); } }; read.execute(); } public void send (){ try { textViewContent.append("我说: "+editTextContent.getText().toString()+"\n"); writer.write(editTextContent.getText().toString()+"\n"); //writer.flush(); editTextContent.setText(""); } catch (IOException e) { e.printStackTrace(); } } } 求大神指导 这个该怎么解决 是在BufferedWrite出的问题吗
android写了一个发送UDP包到指定IP-端口的程序,可怎么都收不到数据包。。。
这段代码在电脑上用JAVA编译运行,在linux虚拟机上用pcap可以抓到包。。如下图: ![图片说明](https://img-ask.csdn.net/upload/201608/04/1470312244_99336.png) 在linux上可以抓到该数据包: ![图片说明](https://img-ask.csdn.net/upload/201608/04/1470312484_296967.png) 然后再在andiord studio里实现并生成apk安装到手机上,但点击send没有反应啊,linux上没有收到任何数据包。。为什么会这样呢? ``` package com.test.s.test; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class MainActivity extends AppCompatActivity { private Button buttonSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonSend = (Button) findViewById(R.id.buttonSend); buttonSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "Sent00!", Toast.LENGTH_SHORT).show(); new Thread(){ @Override public void run() { try { txUDP("192.168.1.102", 8888, "abcdefg"); } catch (IOException e) { e.printStackTrace(); } } }.start(); } }); } private void txUDP(String destip, int port, String txdata) throws IOException { InetAddress address = InetAddress.getByName(destip); byte[] data = txdata.getBytes(); // 2.创建数据报,包含发送的数据信息 DatagramPacket packet = new DatagramPacket(data, data.length, address, port); // 3.创建DatagramSocket对象 DatagramSocket socket = new DatagramSocket(); // 4.向服务器端发送数据报 socket.send(packet); // 5.关闭资源 socket.close(); } } ``` 求解答啊,手机、电脑和linux在同一局域网。
Android socket通信,数据读取。
public class ChatRoom extends ActionBarActivity { protected TextView tv_chat_show; protected EditText ed_chat_input; protected Button btn_send; protected ActionBarActivity that; protected String receiverMsg; protected String sendStr; protected Socket socket; protected boolean flag; protected boolean isClicked; // 创建handle 对象处理接受数据 Handler myHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); tv_chat_show.append("server: " + msg.obj.toString() + "\n"); Log.i("show", msg.obj.toString()); } }; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.chat_room); tv_chat_show = (TextView) findViewById(R.id.tv_chat_show); ed_chat_input = (EditText) findViewById(R.id.ed_chat_input); btn_send = (Button) findViewById(R.id.btn_send); that= this; // 套接字是否存在标志 flag = false; // 按钮是否点击标志 isClicked = false; // 建立线程连接socket new Thread(){ @Override public void run() { super.run(); socket = new Socket(); try { socket.connect(new InetSocketAddress("10.1.11.38", 443), 5000); flag = true; } catch (IOException e) { e.printStackTrace(); } } }.start(); // 创建套接字发送线程 Thread threadSend = new Thread(){ @Override public void run() { super.run(); try { // 等待1秒确保套接字建立完成 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } DataOutputStream dos; //套接字存在并且点击发送按钮 while(flag) { if(isClicked) { try { dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF(sendStr); isClicked = false; dos.close(); Toast.makeText(that,"发送" + sendStr,Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } } } } }; // 创建套接字接受线程 Thread threadRev = new Thread(){ @Override public void run() { super.run(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } DataInputStream dis; while(flag){ try { dis = new DataInputStream(socket.getInputStream()); receiverMsg = dis.readUTF(); Log.i("rev",receiverMsg); Message rM = new Message(); rM.obj = receiverMsg; myHandler.sendMessage(rM); dis.close(); }catch (IOException e){ e.printStackTrace(); } } } }; threadSend.start(); threadRev.start(); btn_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sendStr = ed_chat_input.getText().toString().trim(); ed_chat_input.setText(null); tv_chat_show.append("Client: " + sendStr + "\n"); Log.i("isClicked", "点击"); isClicked = true; } }); } } 测试Log.i("rev",receiverMsg);能够接收到服务器传回来的消息,但是点击发送后软件会崩溃,提示 unfortunately,**** is stoped; Android studio报错信息: 12-22 10:57:34.290 17263-17797/com.teemo.oneteemo E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-931 Process: com.teemo.oneteemo, PID: 17263 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:200) at android.os.Handler.<init>(Handler.java:114) at android.widget.Toast$TN.<init>(Toast.java:342) at android.widget.Toast.<init>(Toast.java:99) at android.widget.Toast.makeText(Toast.java:248) at com.teemo.oneteemo.ChatRoom$3.run(ChatRoom.java:109)
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
前后端分离,我怎么就选择了 Spring Boot + Vue 技术栈?
前两天又有小伙伴私信松哥,问题还是职业规划,Java 技术栈路线这种,实际上对于这一类问题我经常不太敢回答,每个人的情况都不太一样,而小伙伴也很少详细介绍自己的情况,大都是一两句话就把问题抛出来了,啥情况都不了解,就要指出一个方向,这实在是太难了。 因此今天我想从我学习 Spring Boot + Vue 这套技术栈的角度,来和大家聊一聊没有人指导,我是如何一步一步建立起自己的技术体系的。 线上大...
17张图带你解析红黑树的原理!保证你能看懂!
二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意结点的...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
MySQL数据库总结
一、数据库简介 数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。 典型特征:数据的结构化、数据间的共享、减少数据的冗余度,数据的独立性。 关系型数据库:使用关系模型把数据组织到数据表(table)中。现实世界可以用数据来描述。 主流的关系型数据库产品:Oracle(Oracle)、DB2(IBM)、SQL Server(MS)、MySQL(Oracle)。 数据表:数...
记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背
有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好。想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着”背“来记忆的,所以今天的这篇文章,讲给大家详细着讲解他们是如何通信的,让大家尽量能够理解他们之间的区别、优缺点等,这样的话,以后面试官让你举例子,你也能够顺手拈来。 1、管道 我们来看一条 Linux 的语句 netstat -tulnp | gr...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问